我可以使用列表理解语法来创建词典吗?
例如,通过迭代成对的键和值:
d = {... for k, v in zip(keys, values)}
我可以使用列表理解语法来创建词典吗?
例如,通过迭代成对的键和值:
d = {... for k, v in zip(keys, values)}
当前回答
在Python 2.7中,它类似于:
>>> list1, list2 = ['a', 'b', 'c'], [1,2,3]
>>> dict( zip( list1, list2))
{'a': 1, 'c': 3, 'b': 2}
给他们拉链!
其他回答
试试这个,
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'}
您可以为每对创建一个新的dict,并将其与上一个dict合并:
reduce(lambda p, q: {**p, **{q[0]: q[1]}}, bla bla bla, {})
显然,这种方法需要functools的reduce。
在Python 2.7中,它类似于:
>>> list1, list2 = ['a', 'b', 'c'], [1,2,3]
>>> dict( zip( list1, list2))
{'a': 1, 'c': 3, 'b': 2}
给他们拉链!
这段代码将使用列表理解为多个列表创建字典,这些列表具有可用于pd.DataFrame()的不同值
#Multiple lists
model=['A', 'B', 'C', 'D']
launched=[1983,1984,1984,1984]
discontinued=[1986, 1985, 1984, 1986]
#Dictionary with list comprehension
keys=['model','launched','discontinued']
vals=[model, launched,discontinued]
data = {key:vals[n] for n, key in enumerate(keys)}
#Convert dict to dataframe
df=pd.DataFrame(data)
display(df)
enumerate将向vals传递n,以使每个键与其列表匹配
用Python创建具有列表理解的词典我喜欢Python列表理解语法。它也可以用来创建字典吗?例如,通过迭代在成对的键和值上:mydict={(k,v)表示(k,v)在blah blah中}
你要找的是“字典理解”这句话——实际上是:
mydict = {k: v for k, v in iterable}
假设blah-blah-blah是两个元组的可迭代的,那么你就太接近了。让我们创建一些类似的“废话”:
blahs = [('blah0', 'blah'), ('blah1', 'blah'), ('blah2', 'blah'), ('blah3', 'blah')]
听写理解语法:
现在这里的语法是映射部分。这是一个dict理解,而不是set理解(这是你的伪代码所近似的)是冒号,如下所示:
mydict = {k: v for k, v in blahs}
我们看到它是有效的,并且应该保持Python 3.7的插入顺序:
>>> mydict
{'blah0': 'blah', 'blah1': 'blah', 'blah2': 'blah', 'blah3': 'blah'}
在Python 2和3.6版本中,顺序无法保证:
>>> mydict
{'blah0': 'blah', 'blah1': 'blah', 'blah3': 'blah', 'blah2': 'blah'}
添加筛选器:
所有的理解都有一个映射组件和一个过滤组件,可以为任意表达式提供这些组件。
因此,您可以在末尾添加过滤器部件:
>>> mydict = {k: v for k, v in blahs if not int(k[-1]) % 2}
>>> mydict
{'blah0': 'blah', 'blah2': 'blah'}
这里我们只是测试最后一个字符是否可以被2整除,以便在映射键和值之前过滤掉数据。