python字典遍历多个值,并将它们作为单个键的单个列表值返回

时间:2019-02-13 08:32:15

标签: python dictionary

names={"animal":"cat","animal":"dog","animal":"rat","bird":"humming"}
names_dict={}
for k,v in names.items():
    names_dict.setdefault(k,[]).append(v)   
print (names_dict)

我想要的输出应该是

{'animal': ['rat','cat','dog'], 'bird': ['humming']}

但是我得到的输出是这个

{'animal': ['rat'], 'bird': ['humming']}

有人可以告诉我我要去哪里错了。任何帮助是极大的赞赏。谢谢

3 个答案:

答案 0 :(得分:1)

Python词典中的键应该是唯一的。您重复了三次相同的密钥'animal',Python保留了 last 1 动物密钥的值。在official documentation中,

  

最好将字典视为一组键:值对,要求键是唯一的(在一个字典中)。


1。请注意, last 也可能非常模糊。视您使用的Python版本而定,它可能是一致的,但通常不能保证。

答案 1 :(得分:0)

此行:

var markupExt = Viewer.getExtension("Autodesk.Viewing.Markups ore");
var styleObj = Autodesk.Viewing.Extensions.Markups.Core.Utils.createStyle([...], markupExt)

与此完全相同:

names={"animal":"cat","animal":"dog","animal":"rat","bird":"humming"}

将项目添加到names={"animal":"rat","bird":"humming"} 时,如果键中已经有键,则该值将被覆盖。

答案 2 :(得分:0)

正如@Vijay M的回答中所述,python词典中的键应该是唯一的。我想您正在寻找这样的解决方案:

names = {"cat": "animal", "dog": "animal", "rat": "animal", "humming": "bird"}

names_dict={}
for k, v in names.items():
    names_dict.setdefault(v,[]).append(k)

print(names_dict)

请注意,值和键已交换。

希望这会有所帮助。