Python将列表转换为特定的dict
我有一个列表,我想转换成一个特定的dictPython将列表转换为特定的dict,python,list,dictionary,Python,List,Dictionary,我有一个列表,我想转换成一个特定的dictdict\u a 输入: a = ['AAA: key1', 'value1', 'value2', 'AAA: key2', 'value3', 'value4', 'value5', 'AAA: key3', 'value6', 'value7'] dict_a = {'key1': [value1, value2], 'key2': [value3, value4, value5], 'key3': [value6, value7]} for
dict\u a
输入:
a = ['AAA: key1', 'value1', 'value2', 'AAA: key2', 'value3', 'value4', 'value5', 'AAA: key3', 'value6', 'value7']
dict_a = {'key1': [value1, value2], 'key2': [value3, value4, value5], 'key3': [value6, value7]}
for elem in a:
if a.startswith(AAA:):
d_a = {elem}
预期输出:
a = ['AAA: key1', 'value1', 'value2', 'AAA: key2', 'value3', 'value4', 'value5', 'AAA: key3', 'value6', 'value7']
dict_a = {'key1': [value1, value2], 'key2': [value3, value4, value5], 'key3': [value6, value7]}
for elem in a:
if a.startswith(AAA:):
d_a = {elem}
我的尝试:
a = ['AAA: key1', 'value1', 'value2', 'AAA: key2', 'value3', 'value4', 'value5', 'AAA: key3', 'value6', 'value7']
dict_a = {'key1': [value1, value2], 'key2': [value3, value4, value5], 'key3': [value6, value7]}
for elem in a:
if a.startswith(AAA:):
d_a = {elem}
这是使用集合的一种方法。defaultdict:
from collections import defaultdict
a = ['AAA: key1', ' value1', ' value2', 'AAA: key2', ' value3', ' value4', ' value5', 'AAA: key3', ' value6', ' value7']
d = defaultdict(list)
for x in a:
if not x.startswith('AAA'):
d[c].append(x.strip())
else:
c = x.split(': ')[1]
print(d)
# defaultdict(<class 'list'>, {'key1': ['value1', 'value2'], 'key2': ['value3', 'value4', 'value5'], 'key3': ['value6', 'value7']})
从集合导入defaultdict
a=['AAA:key1'、'value1'、'value2'、'AAA:key2'、'value3'、'value4'、'value5'、'AAA:key3'、'value6'、'value7']
d=默认DICT(列表)
对于a中的x:
如果不是x.startswith('AAA'):
d[c]。追加(x.strip())
其他:
c=x.split(“:”)[1]
印刷品(d)
#defaultdict(,{'key1':['value1','value2'],'key2':['value3','value4','value5'],'key3':['value6','value7']})
这是使用集合的一种方法。defaultdict:
from collections import defaultdict
a = ['AAA: key1', ' value1', ' value2', 'AAA: key2', ' value3', ' value4', ' value5', 'AAA: key3', ' value6', ' value7']
d = defaultdict(list)
for x in a:
if not x.startswith('AAA'):
d[c].append(x.strip())
else:
c = x.split(': ')[1]
print(d)
# defaultdict(<class 'list'>, {'key1': ['value1', 'value2'], 'key2': ['value3', 'value4', 'value5'], 'key3': ['value6', 'value7']})
从集合导入defaultdict
a=['AAA:key1'、'value1'、'value2'、'AAA:key2'、'value3'、'value4'、'value5'、'AAA:key3'、'value6'、'value7']
d=默认DICT(列表)
对于a中的x:
如果不是x.startswith('AAA'):
d[c]。追加(x.strip())
其他:
c=x.split(“:”)[1]
印刷品(d)
#defaultdict(,{'key1':['value1','value2'],'key2':['value3','value4','value5'],'key3':['value6','value7']})
我喜欢用生成器来处理这样的问题,积累一个结果单位,我们看到下一个结果开始,然后产生我们收集的结果
def key_val_gen(a):
key = None
vals = []
for item in a:
if item.startswith('AAA: '):
if key:
yield key, vals
key = item.split(maxsplit=1)[1]
vals = []
else:
vals.append(item)
if key:
yield key, vals
a = ['AAA: key1', 'value1', 'value2', 'AAA: key2', 'value3', 'value4', 'value5', 'AAA: key3', 'value6', 'value7']
print(dict(key_val_gen(a)))
# {'key1': ['value1', 'value2'], 'key2': ['value3', 'value4', 'value5'], 'key3': ['value6', 'value7']}
我喜欢用一个生成器来处理这样的问题,在我们看到下一个结果的时候积累一个结果,然后产生我们收集的结果
def key_val_gen(a):
key = None
vals = []
for item in a:
if item.startswith('AAA: '):
if key:
yield key, vals
key = item.split(maxsplit=1)[1]
vals = []
else:
vals.append(item)
if key:
yield key, vals
a = ['AAA: key1', 'value1', 'value2', 'AAA: key2', 'value3', 'value4', 'value5', 'AAA: key3', 'value6', 'value7']
print(dict(key_val_gen(a)))
# {'key1': ['value1', 'value2'], 'key2': ['value3', 'value4', 'value5'], 'key3': ['value6', 'value7']}
您还可以使用
itertools.groupby
对“is a key”和“is a value”中的项目进行分组,然后在同一迭代器上使用next
组合连续元素:
>>> from itertools import groupby
>>> groups = (next(g).lstrip("AAA: ") if k else list(g)
... for k, g in groupby(a, key=lambda x: x.startswith("AAA: ")))
...
>>> {g: next(groups) for g in groups}
{'key1': ['value1', 'value2'],
'key2': ['value3', 'value4', 'value5'],
'key3': ['value6', 'value7']}
您还可以使用
itertools.groupby
对“is a key”和“is a value”中的项目进行分组,然后在同一迭代器上使用next
组合连续元素:
>>> from itertools import groupby
>>> groups = (next(g).lstrip("AAA: ") if k else list(g)
... for k, g in groupby(a, key=lambda x: x.startswith("AAA: ")))
...
>>> {g: next(groups) for g in groups}
{'key1': ['value1', 'value2'],
'key2': ['value3', 'value4', 'value5'],
'key3': ['value6', 'value7']}
根本不清楚你在问什么。首先,变量
value1
和字符串'value1'
之间是否存在任何关系,对于value2
?根本不清楚你在问什么。首先,变量value1
和字符串'value1'
之间是否存在任何关系,对于value2
?谢谢,这是我想要的,但是如何删除defaultdict(,)please@locklockM,这只是defaultdict
的一种表示形式,实际上并不重要。您始终可以像使用普通词典一样访问项目。例如:d['key2']
将发出['value3','value4','value5']
。谢谢,这是我想要的,但是如何删除defaultdict(,)please@locklockM,这只是defaultdict
的一种表示形式,实际上并不重要。您始终可以像使用普通词典一样访问项目。例如:d['key2']
将发出['value3','value4','value5']
。