Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将元组列表转换为字典_Python_List_Dictionary - Fatal编程技术网

Python 将元组列表转换为字典

Python 将元组列表转换为字典,python,list,dictionary,Python,List,Dictionary,我正在寻找一种转换元组列表的方法,如下所示: [(1,4),(2,4),(3,4),(4,15),(5,15),(6,23),(7,23),(8,23),(9,15),(10,23),(11,15),(12,15)] {4:[1,2,3] ,15:[4,5,9,11,12], 23:[6,7,8,10]} 输入这样的词典: [(1,4),(2,4),(3,4),(4,15),(5,15),(6,23),(7,23),(8,23),(9,15),(10,23),(11,15),(12,15)]

我正在寻找一种转换元组列表的方法,如下所示:

[(1,4),(2,4),(3,4),(4,15),(5,15),(6,23),(7,23),(8,23),(9,15),(10,23),(11,15),(12,15)]
{4:[1,2,3] ,15:[4,5,9,11,12], 23:[6,7,8,10]}
输入这样的词典:

[(1,4),(2,4),(3,4),(4,15),(5,15),(6,23),(7,23),(8,23),(9,15),(10,23),(11,15),(12,15)]
{4:[1,2,3] ,15:[4,5,9,11,12], 23:[6,7,8,10]}
每个元组中的第二个元素成为字典键,与该键关联的所有第一个元组元素都存储在值列表中

你能告诉我怎么做吗?

这样可以:

l = [(1,4),(2,4),(3,4),(4,15),(5,15),(6,23),(7,23),(8,23),(9,15),(10,23),(11,15),(12,15)]
d = {}
for v, k in l:
    d.setdefault(k, []).append(v)
from collections import defaultdict

def to_list_of_dicts(list_of_tuples):
    d = defaultdict(list)
    for x, y in list_of_tuples:
        d[y].append(x)
    return sorted([{x: y} for (x, y) in d.items()])
>>从集合导入defaultdict
>>>l=[(1,4)、(2,4)、(3,4)、(4,15)、(5,15)、(6,23)、(7,23)、(8,23)、(9,15)、(10,23)、(11,15)、(12,15)]
>>>d=默认DICT(列表)
>>>对于v,k在l中:
...     d[k]。追加(v)
... 
>>>d
defaultdict(,{23:[6,7,8,10],4:[1,2,3],15:[4,5,9,11,12]})
>>>[{k:d[k]}对于排序后的(d)中的k)]
[{4: [1, 2, 3]}, {15: [4, 5, 9, 11, 12]}, {23: [6, 7, 8, 10]}]

它不花哨,但很简单

l = [(1,4),(2,4),(3,4),(4,15),(5,15),(6,23),(7,23),(8,23),(9,15),(10,23),(11,15),(12,15)]
d = dict((k, [i[0] for i in l if i[1] == k]) for k in frozenset(j[1] for j in l))

胡萨

在for循环中使用解包。在一项列表中不需要逗号(仅元组)。在Python中使用异常比其他语言更合适,但在本例中仍然有点愚蠢。异常并不愚蠢——它是defaultdict如何做到的。不过我同意解包。为什么你想要一个字典列表,而每个字典只有一个键/值?你确定你不只是想要一本字典吗?是的,你是对的。我终于在找字典了。感谢您指出这一点……从视图的数量来看,大多数人(像我一样)来到这里是为了寻找如何将
myList=[(key1,val1),(key2,val2),…]
转换为dict:
{key1:val1,key2:val2…}
。为此,只需在编辑中复制我对setdefault的使用,就可以执行
dict(myList)
,现在选民可以选择的选项更少了……我真的没有复制它。我意识到我也可以在发布和更新后使用setdefault,因为我更喜欢它。没问题。无论如何,编辑以添加其他想法并没有错,但通常是添加更多信息,而不是创建重复的答案。但我知道你没有抄袭我的。太棒了!我今天刚学了一个新的dict操作——setdefault。这将整理我的代码一点!干杯+1@Steve愚蠢:看看collections.defaultdict。使用defaultdict更好。+1。比每次调用
setdefault()
更流畅。Love collections.defaultdict。这是我去上课做大量工作的时间。
for key, value in tuples:
    if d.get(key):
        d[key].append(value)
        continue
    d[key] =[value]
for key, value in tuples:
    if d.get(key):
        d[key].append(value)
        continue
    d[key] =[value]