我有一个包含重复键和多个值对的列表:
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"]'}
我该如何解决这个问题?
答案 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']}