Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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将列表转换为特定的dict_Python_List_Dictionary - Fatal编程技术网

Python将列表转换为特定的dict

Python将列表转换为特定的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
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']