社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

1mari • 5 年前 • 1722 次点击  

我有一个元组列表:

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
 
1722 次点击  
文章 [ 3 ]  |  最新文章 5 年前
Rafael Marques
Reply   •   1 楼
Rafael Marques    5 年前

你可以试试这个:

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    5 年前

你必须附加 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    5 年前

你可以用 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']}