如何在python中创建多个键和对的字典?

时间:2017-10-24 21:55:44

标签: python python-3.x dictionary

我有一个包含重复键和多个值对的列表:

abc abc.txt
abc abc-xyz.jpg
abc abc.978.png
efg efg.txt
efg efg-xyz.jpg
efg efg.978.png

我想创建一个这样的字典。

dict = {'abc':'["abc.txt", "abc-xyz.jpg", "abc.978.png"]', 'efg':'["efg.txt", "efg-xyz.jpg", "efg.978.png"]'}

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

您可以使用defaultdict来完成此操作。

from collections import defaultdict
lines = string.split('\n')
d = defaultdict(list)
for line in lines:
    key, value = line.split(' ')
    d[key].append(value)

答案 1 :(得分:2)

您需要使用空列表[]初始化每个键,然后在添加新项目时使用append。 例如:

list = """abc abc.txt
abc abc-xyz.jpg
abc abc.978.png
efg efg.txt
efg efg-xyz.jpg
efg efg.978.png"""

dict = {}

for line in list.split('\n'):
    (key, value) = line.split(' ')
    if not key in dict:
        dict[key] = []
    dict[key].append(value)

print(dict)

答案 2 :(得分:0)

您可以使用itertools.groupby

import itertools
s = ['abc abc.txt', 'abc abc-xyz.jpg', 'abc abc.978.png', 'efg efg.txt', 'efg efg-xyz.jpg', 'efg efg.978.png']
new_s = [i.split() for i in s]
new_data = {a:[d for c, d in list(b)] for a, b in itertools.groupby(sorted(new_s, key=lambda x:x[0]), key=lambda x:x[0])}

输出:

{'abc': ['abc.txt', 'abc-xyz.jpg', 'abc.978.png'], 'efg': ['efg.txt', 'efg-xyz.jpg', 'efg.978.png']}