EB2*_*127 5 python dictionary list data-structures
通过迭代python列表,我想创建一个列表字典,其中每个字典的值也是一个列表.
结构将是:
[{key1: [val1, val2]}, {key2: [val3, val4]}, {key3: [val5, val6]}, ...]
Run Code Online (Sandbox Code Playgroud)
我从一个整数列表开始:
my_list = [3423, 77813, 12, 153, 1899]
Run Code Online (Sandbox Code Playgroud)
对于列表中的每个元素,这应该成为字典键.然后我将两个项附加到字典的值(这是一个列表).(假设这两个项目总是"狗"和"猫")
以下是最终结果:
[{3423:['dog', 'cat']}, {77813:['dog', 'cat']}, {12:['dog', 'cat']},
{153:['dog', 'cat']}, {1899:['dog', 'cat']}]
Run Code Online (Sandbox Code Playgroud)
我尝试这样做有很多问题:
for i in my_list:
d = {} ## create a dictionary 'd'
d[i] = [].append('dog') ## or `d[i] = ['dog'].append('cat')`
my_list.append(d) ## here is a bug
my_list.remove(i) ## remove the item from the list
Run Code Online (Sandbox Code Playgroud)
我不喜欢我必须命名一个空字典,让它们各自命名相同的东西(这里d
).后来,我想用钥匙访问这些词典 - 我不在乎他们的名字.
当它实际上应该是一个列表时,我不知道如何合理地将多个项附加到字典值.如果我想添加几个项目怎么办?
该错误是将字典附加到原始列表,然后删除该项目.当然,这可以通过一个新的列表来解决:
new_list = []
for i in my_list:
d = {}
d[i] = [].append('dog')
new_list.append(d)
my_list.remove(i)
Run Code Online (Sandbox Code Playgroud)但这感觉非常笨拙.
如果你想要一些非常简单的东西,你可以使用列表理解:
data = ['dog', 'cat']
my_list = [3423, 77813, 12, 153, 1899]
result = [{k:data} for k in my_list]
print(result)
# [{3423: ['dog', 'cat']}, {77813: ['dog', 'cat']}, {12: ['dog', 'cat']}, {153: ['dog', 'cat']}, {1899: ['dog', 'cat']}]
Run Code Online (Sandbox Code Playgroud)
此外,这里是一个非常方便添加/删除值的示例defaultdict
:
from collections import defaultdict
my_list = [3423, 77813, 12, 153, 1899]
new_list = []
for number in my_list:
# create the defaultdict here
d = defaultdict(list)
# add some data
d[number] += ['dog', 'cat', 'kitten']
# remove some data
d[number].remove('kitten')
# append dictionary
new_list.append(dict(d))
print(new_list)
Run Code Online (Sandbox Code Playgroud)
哪个输出:
[{3423: ['dog', 'cat']}, {77813: ['dog', 'cat']}, {12: ['dog', 'cat']}, {153: ['dog', 'cat']}, {1899: ['dog', 'cat']}]
Run Code Online (Sandbox Code Playgroud)
使用defaultdict
here非常有用,因为它使用空列表初始化字典中的每个条目.如果您不想这样做,可以使用普通字典实现此目的,如问题所示,但这需要您自己初始化空列表.
归档时间: |
|
查看次数: |
449 次 |
最近记录: |