我试图根据名称的第一个字母将列表names
中的每个字典分离到它们自己的类别。我对编码很陌生,我尝试过使用其他功能,如update
,但我没有成功地实现最终结果。我不知道如何在嵌套字典中添加字典。
names = [{"name":"alpha"}, {"name":"apple"}, {"name":"bravo"}, {"name":"charlie"}, {"name":"chucky"}]
foo = {
"a" : {},
"b" : {},
"c" : {}
}
最终结果应该是:
foo = {
"a" : {
{"name":"alpha"},
{"name":"apple"}
},
"b" : {
{"name":"bravo"}
},
"c" : {
{"name":"charlie"},
{"name":"chucky"}
}
}
字典是键值对,所以你想要的输出是不可能的。
字典键必须是唯一的,所以使用一个已经存在的键在字典上调用update
只会覆盖这个值。
听起来你想要的是一个列表作为嵌套结构,像这样:
foo = {}
for item in names:
char = item["name"][0]
try:
foo[char].append(item)
except KeyError:
foo[char] = [item]
print(foo)
输出foo = {
"a" : [
{"name":"alpha"},
{"name":"apple"}
],
"b" : [
{"name":"bravo"}
],
"c" : [
{"name":"charlie"},
{"name":"chucky"}
]
}
#try this
names = [{"name":"alpha"}, {"name":"apple"}, {"name":"bravo"},
{"name":"charlie"}, {"name":"chucky"}]
foo = {
"a" : {},
"b" : {},
"c" : {}
}
for keys in foo.keys():
lists=[]
for name in names:
for key,val in name.items():
if val[0].lower()==keys.lower():
lists.append(name)
foo[keys]=lists
print(foo)
**兄弟,你犯了什么错误:
"a" : {
{"name":"alpha"},
{"name":"apple"}
}
-dict总是接受键和值对而不仅仅是值,因为它是如果将来你尝试在没有键的情况下追加dict,那么总是使用list不是dict * *
foo = {
"a" : [
{"name":"alpha"},
{"name":"apple"}
],
"b" : [
{"name":"bravo"}
],
"c" : [
{"name":"charlie"},
{"name":"chucky"}
]
}
下面的字典无效,因为不能用逗号分隔字典作为另一个字典的唯一内容。字典应该包含键、值对。
foo = {
"a" : {
{"name":"alpha"},
{"name":"apple"}
},
"b" : {
{"name":"bravo"}
},
"c" : {
{"name":"charlie"},
{"name":"chucky"}
}
}
例如在下面的键中,值对a
是键,直到这部分都可以。{{"name":"alpha"},{"name":"apple"}}
部分的问题是在另一个字典中使用逗号分隔字典,这将导致错误TypeError: unhashable type: 'dict'
"a" : {
{"name":"alpha"},
{"name":"apple"}
},
但是,您可以使用一个字典列表作为键的值。
您可以使用下面的方法创建一个。
import json
names = [{"name":"alpha"}, {"name":"apple"}, {"name":"bravo"}, {"name":"charlie"}, {"name":"chucky"}]
foo = {}
for item_dict in names:
val = item_dict["name"]
foo.setdefault(val[0], []).append(item_dict)
print(json.dumps(foo, indent=2))
这将输出:
{
"a": [
{
"name": "alpha"
},
{
"name": "apple"
}
],
"b": [
{
"name": "bravo"
}
],
"c": [
{
"name": "charlie"
},
{
"name": "chucky"
}
]
}