我能使用列表推导式语法创建一个字典吗?
例如,迭代键值对:
d = {... for k, v in zip(keys, values)}
我能使用列表推导式语法创建一个字典吗?
例如,迭代键值对:
d = {... for k, v in zip(keys, values)}
试一试这个:
def get_dic_from_two_lists(keys, values):
return { keys[i] : values[i] for i in range(len(keys)) }
country = ['India', 'Pakistan', 'China']
capital = ['New Delhi', 'Islamabad', 'Beijing']
然后从这两个列表创建一个字典:
print get_dic_from_two_lists(country, capital)
{'Pakistan': 'Islamabad', 'China': 'Beijing', 'India': 'New Delhi'}
在@Ekhtiar答案的基础上,如果您想从 list
中查找 dict
,则可以使用以下方法:
names = ['a', 'b', 'd', 'f', 'c']
names_to_id = {v:k for k, v in enumerate(names)}
# {'a': 0, 'b': 1, 'c': 2, 'd': 3, 'f': 4}
或者在极少数需要过滤重复项的情况下,先使用set
(数字列表中最好的选项):
names = ['a', 'b', 'd', 'f', 'd', 'c']
sorted_list = list(set(names))
sorted_list.sort()
names_to_id = {v:k for k, v in enumerate(sorted_list)}
# {'a': 0, 'b': 1, 'c': 2, 'd': 3, 'f': 4}
names = [1,2,5,5,6,2,1]
names_to_id = {v:k for k, v in enumerate(set(names))}
# {1: 0, 2: 1, 5: 2, 6: 3}
{name:index for index, name in enumerate(names)}
作为改进。 - bjrne>>> {k: v**3 for (k, v) in zip(string.ascii_lowercase, range(26))}
{'i': 512, 'e': 64, 'o': 2744, 'h': 343, 'l': 1331, 's': 5832, 'b': 1, 'w': 10648, 'c': 8, 'x': 12167, 'y': 13824, 't': 6859, 'p': 3375, 'd': 27, 'j': 729, 'a': 0, 'z': 15625, 'f': 125, 'q': 4096, 'u': 8000, 'n': 2197, 'm': 1728, 'r': 4913, 'k': 1000, 'g': 216, 'v': 9261}
是的,这是可能的。在Python中,可以在列表、集合、字典等数据结构中使用推导式(Comprehension)。您可以按照以下方式编写代码:
mydict = {k:v for (k,v) in blah}
parents = [father, mother]
parents = {parent:1 - P["mutation"] if parent in two_genes else 0.5 if parent in one_gene else P["mutation"] for parent in parents}
这种方法使用for循环迭代给定日期。
Syntax: {key: value for (key, value) in data}
例如:
# create a list comprehension with country and code:
Country_code = [('China', 86), ('USA', 1),
('Ghana', 233), ('Uk', 44)]
# use iterable method to show results
{key: value for (key, value) in Country_code}
假设 blah blah blah 是一个包含两个元组的列表:
我们来看看两种方法:
# method 1
>>> lst = [('a', 2), ('b', 4), ('c', 6)]
>>> dict(lst)
{'a': 2, 'b': 4, 'c': 6}
# method 2
>>> lst = [('a', 2), ('b', 4), ('c', 6)]
>>> d = {k:v for k, v in lst}
>>> d
{'a': 2, 'b': 4, 'c': 6}
你可以为每一对键值对创建一个新的字典,并将其与前一个字典合并:
reduce(lambda p, q: {**p, **{q[0]: q[1]}}, bla bla bla, {})
functools
中的reduce
函数。
collections.Counter
是一种专门用于计数的字典类型:使用字典计算列表中的项目数。 - smciblah bla
是误导性的,你可能指的是一个元组列表,但它也可以是一个普通的 Python 列表。因此,前几个高票答案都涉及由元组列表构成的字典,而 这个 答案则不是。 - Timozip(...)
而是使用单独的字典,那么您需要执行类似于d = {... for (k, v) in other_dict.items()}
的操作。 - Miguel Vacas