将列表转换为Python中的列表字典

时间:2017-08-30 15:49:30

标签: python list dictionary

我有以下列表。我想创建一个字典,其中list的第一个值为key,第二个值为value。像

这样的东西
questionNumber.split(",");
mydict = {22:1 0 0 0, 23:0 1 2 1}  

4 个答案:

答案 0 :(得分:2)

您应该能够使用collections.defaultdict数据结构。

import collections

l = [(22, 1),
 (22, 0),
 (22, 0),
 (22, 1),
 (23, 0),
 (23, 1),
 (23, 2),
 (23, 1),
 (23, 0),
 (24, 3),
 (24, 3),
 (24, 2),
 (24, 1),
 (24, 0)]

d = collections.defaultdict(list)
for x, y in l:
    d[x].append(y)

print(dict(d))
{22: [1, 0, 0, 1], 23: [0, 1, 2, 1, 0], 24: [3, 3, 2, 1, 0]}

使用dict.setdefault有另一种选择,但效率稍差。

d = {}
for x, y in l:
    d.setdefault(x, []).append(y)

print(d)
{22: [1, 0, 0, 1], 23: [0, 1, 2, 1, 0], 24: [3, 3, 2, 1, 0]}

如果你想把它们作为空格分隔的字符串,你需要使用dict comp和str.join的第二层逻辑:

out = {k : ' '.join(map(str, v)) for k, v in d.items()}
print(out)
{22: '1 0 0 1', 23: '0 1 2 1 0', 24: '3 3 2 1 0'}

答案 1 :(得分:1)

使用itertools.groupby()功能:

import itertools

data = [(22,1), (22,0), (22,0), (22,1), (23,0), (23,1), (23,2), (23,1), (23,0), (24,3), (24,3), (24,2), (24,1), (24,0)]
result = {k: list(i[1] for i in g) 
             for k,g in itertools.groupby(sorted(data), key=lambda x: x[0])}
print(result)

输出:

{24: [0, 1, 2, 3, 3], 22: [0, 0, 1, 1], 23: [0, 0, 1, 1, 2]}

答案 2 :(得分:0)

您可以通过以下代码来执行此操作

for i in mydata:
    if mydict.get(i[0], ''):
        mydict[i[0]] += ' ' + str(i[1])
    else:
        mydict[i[0]] = str(i[1])

print(mydict)
{'22': "1 0 0 0", '23':"0 1 2 1"}  

这是你的dict的值 - 字符串

答案 3 :(得分:0)

一个简单的for循环:

mydict = {}

for i in range(len(mydata)):
    mylist = mydict.get(mydata[i][0], [])
    mylist.append(mydata[i][1])
    mydict[mydata[i][0]] = mylist