创建具有理解力的字典
我可以使用列表理解语法来创建字典吗?
例如,通过迭代键和值对:
d = {... for k, v in zip(keys, values)}
Can I use list comprehension syntax to create a dictionary?
For example, by iterating over pairs of keys and values:
d = {... for k, v in zip(keys, values)}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(17)
使用 字典理解(Python 2.7 及更高版本):
或者,使用 < a href="https://docs.python.org/3/library/stdtypes.html#typesmapping" rel="noreferrer">
dict
构造函数:给定单独的键列表和值,使用
dict
构造函数和zip< /代码>
:
Use a dict comprehension (Python 2.7 and later):
Alternatively, use the
dict
constructor:Given separate lists of keys and values, use the
dict
constructor withzip
:在 Python 3 和 Python 2.7+ 中,字典推导式如下所示:
对于 Python 2.6 或更早版本,请参阅 fortran 的答案。
In Python 3 and Python 2.7+, dictionary comprehensions look like the below:
For Python 2.6 or earlier, see fortran's answer.
事实上,如果 iterable 已经理解某种映射,你甚至不需要迭代它, dict 构造函数会慷慨地为你做这件事:
In fact, you don't even need to iterate over the iterable if it already comprehends some kind of mapping, the dict constructor doing it graciously for you:
您正在寻找短语“字典理解” - 它实际上是:
假设
blah blah blah
是二元组的可迭代 - 你非常接近。让我们创建一些像这样的“废话”:字典理解语法:
现在这里的语法是映射部分。是什么使它成为
dict
理解而不是set
理解(这就是您的伪代码的近似值)是冒号,:
如下所示:我们看到它有效,并且应该保留 Python 3.7 的插入顺序:
在 Python 2 和 3.6 之前,不能保证顺序:
添加过滤器:
所有推导式都具有映射组件和过滤组件,您可以使用它们提供任意表达。
所以你可以在末尾添加一个过滤部分:
这里我们只是测试最后一个字符是否能被2整除,以在映射键和值之前过滤掉数据。
You're looking for the phrase "dict comprehension" - it's actually:
Assuming
blah blah blah
is an iterable of two-tuples - you're so close. Let's create some "blahs" like that:Dict comprehension syntax:
Now the syntax here is the mapping part. What makes this a
dict
comprehension instead of aset
comprehension (which is what your pseudo-code approximates) is the colon,:
like below:And we see that it worked, and should retain insertion order as-of Python 3.7:
In Python 2 and up to 3.6, order was not guaranteed:
Adding a Filter:
All comprehensions feature a mapping component and a filtering component that you can provide with arbitrary expressions.
So you can add a filter part to the end:
Here we are just testing for if the last character is divisible by 2 to filter out data before mapping the keys and values.
在 Python 2.7 中,它就像:
压缩它们!
In Python 2.7, it goes like:
Zip them!
Python 版本 >= 2.7,执行以下操作:
Python 版本 2.7(RIP,2010年7月3日 - 2019年12月31日),执行以下操作:
Python version >= 2.7, do the below:
Python version < 2.7(RIP, 3 July 2010 - 31 December 2019), do the below:
要添加@fortran的答案,如果您想迭代键列表
key_list
以及值列表value_list
:或
To add onto @fortran's answer, if you want to iterate over a list of keys
key_list
as well as a list of valuesvalue_list
:or
再举一个例子。想象一下您有以下列表:
并且您想将其转换为字典,其中键是索引,值是列表中的元素。您可以使用以下代码行来执行此操作:
Just to throw in another example. Imagine you have the following list:
and you want to turn it into a dict where the key is the index and value is the element in the list. You can do so with the following line of code:
此代码将使用列表理解为具有不同值的多个列表创建字典,这些列表可用于
pd.DataFrame()
enumerate
将传递n
到vals
将每个key
与其列表进行匹配This code will create dictionary using list comprehension for multiple lists with different values that can be used for
pd.DataFrame()
enumerate
will passn
tovals
to match eachkey
with its list这是使用字典理解创建字典的另一个示例:
我在这里要做的是创建一个字母字典,其中每对;是英文字母及其在英文字母表中的对应位置
注意这里使用 enumerate 来获取字母表及其在列表中的索引,并交换字母表和索引以生成字典的键值对
希望它给出了一个好主意字典比较给你并鼓励你更频繁地使用它来使你的代码紧凑
Here is another example of dictionary creation using dict comprehension:
What i am tring to do here is to create a alphabet dictionary where each pair; is the english letter and its corresponding position in english alphabet
Notice the use of enumerate here to get a list of alphabets and their indexes in the list and swapping the alphabets and indices to generate the key value pair for dictionary
Hope it gives a good idea of dictionary comp to you and encourages you to use it more often to make your code compact
如果您想从
列表中查找
,你可以使用这个:dict
,请添加到@Ekhtiar答案或者在极少数情况下,你想过滤重复项,首先使用
set
(最好在数字列表中):Adding to @Ekhtiar answer, if you want to make look up
dict
fromlist
, you can use this:Or in rare case that you want to filter duplicate, use
set
first (best in list of number):试试这个,
假设我们有两个列表 country 和 capital
然后从两个列表创建字典:
输出如下,
Try this,
Assume we have two lists country and capital
Then create dictionary from the two lists:
The output is like this,
Python 支持字典推导式,它允许您使用类似的简洁语法在运行时表达字典的创建。
字典理解采用 {key: value for (key, value) in iterable} 的形式。此语法是在 Python 3 中引入的,并向后移植到 Python 2.7,因此无论您安装的是哪个版本的 Python,您都应该能够使用它。
一个典型的例子是采用两个列表并创建一个字典,其中第一个列表中每个位置的项目成为键,第二个列表中相应位置的项目成为值。
此推导式中使用的 zip 函数返回一个元组迭代器,其中元组中的每个元素均取自每个输入可迭代对象中的相同位置。在上面的示例中,返回的迭代器包含元组 (“a”, 1)、(“b”, 2) 等。
输出:
Python supports dict comprehensions, which allow you to express the creation of dictionaries at runtime using a similarly concise syntax.
A dictionary comprehension takes the form {key: value for (key, value) in iterable}. This syntax was introduced in Python 3 and backported as far as Python 2.7, so you should be able to use it regardless of which version of Python you have installed.
A canonical example is taking two lists and creating a dictionary where the item at each position in the first list becomes a key and the item at the corresponding position in the second list becomes the value.
The zip function used inside this comprehension returns an iterator of tuples, where each element in the tuple is taken from the same position in each of the input iterables. In the example above, the returned iterator contains the tuples (“a”, 1), (“b”, 2), etc.
Output:
是的,这是可能的。在python中,推导式可以用在List、Set、Dictionary等中。
你可以这样写
另一个使用条件语句和循环进行字典理解的详细示例:
Yes, it's possible. In python, Comprehension can be used in List, Set, Dictionary, etc.
You can write it this way
Another detailed example of Dictionary Comprehension with the Conditional Statement and Loop:
您可以为每一对创建一个新的字典,并将其与前一个字典合并:
显然,这种方法需要来自
functools
的reduce
。You can create a new dict for each pair and merge it with the previous dict:
Obviously this approaches requires
reduce
fromfunctools
.假设 blah blah blah 是一个二元组列表:
让我们看看两种方法:
Assuming blah blah blah is a two-tuples list:
Let's see two methods:
此方法使用 for 循环对给定日期进行迭代。
例如:
this approach uses iteration over the given date using a for loop.
Eg: