Py学习  »  Python

Python:创建一个字典,其中键有多个值

1mari • 4 年前 • 944 次点击  

我有一个元组列表:

L=[('a','111'),('b','222'),('a','333'),('b','444')]

从这个列表中,我想创建一个字典,其中键是元组('a'和'b')的第一个元素,关联的值在一个列表中:

预期产量:

{'a':['111','333'],'b':['222','444']}

我怎样才能解决这个问题?

d={}
for x in range (len(L)):
    d[L[x][0]]=[L[x][1]]
return d

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/56797
 
944 次点击  
文章 [ 3 ]  |  最新文章 4 年前
Rafael Marques
Reply   •   1 楼
Rafael Marques    4 年前

你可以试试这个:

L = [('a','111'),('b','222'),('a','333'),('b','444')]
my_dict = {}

for item in L:
    if item[0] not in my_dict:
        my_dict[item[0]] = []

    my_dict[item[0]].append(item[1])

print(my_dict)

输出:

python your_script.py
{'a': ['111', '333'], 'b': ['222', '444']}

正如@chepner所指出的,您可以使用 defaultdict 到。

defaultdict 您不需要检查您的 dict .

L = [('a','111'),('b','222'),('a','333'),('b','444')]
my_dict = defaultdict(list)

for item in L:
    my_dict[item[0]].append(item[1])

print(my_dict)

以及输出:

defaultdict(<class 'list'>, {'a': ['111', '333'], 'b': ['222', '444']})

迪克特 ,您只需从中创建一个新的dict:

print(dict(my_dict))

输出为:

{'a': ['111', '333'], 'b': ['222', '444']}
chepner
Reply   •   2 楼
chepner    4 年前

你必须附加 L[x][1] 对于现有的列表,不要用新的单例列表替换其中的任何内容。

d={}
for x in range (len(L)):
    if L[x][0] not in d:
        d[L[x][0]] = []
    d[L[x][0]].append(L[x][1])
return d

一个 defaultdict

from collections import defaultdict

d = defaultdict(list)
for x in range(len(L)):
    d[L[x][0]].append(L[x][1])
return d

更习惯的写作风格是直接在 list 并立即打开密钥和值:

d = defaultdict(list)
for key, value in L:
    d[key].append(value)
Mark Meyer
Reply   •   3 楼
Mark Meyer    4 年前

你可以用 setdefault()

L=[('a','111'),('b','222'),('a','333'),('b','444')]

d = {}
for key, value in L:
    d.setdefault(key, []).append(value)

print(d)
# {'a': ['111', '333'], 'b': ['222', '444']}