c2c网站建设,哪个网站音乐做的最好的,wordpress 变小程序,免费的wordpress分类在哪设置目录 问题解决方案讨论 问题
如果希望能够将一个键#xff08;key#xff09;映射到多个值#xff08;value#xff09;上#xff0c;那么应该如何创建这个字典#xff1f;#xff08;即所谓的一键多值字典 [multidict]#xff09;
解决方案
字典是一种关联容器key映射到多个值value上那么应该如何创建这个字典即所谓的一键多值字典 [multidict]
解决方案
字典是一种关联容器每个键都映射到一个单独的值上。如果想让键映射到多个值那么就需要将这多个值保存在另一个容器如列表或集合中。
# 以列表作为容器存储多个值
d {a: [1, 2, 3],b: [4, 5]
}# 以集合作为容器存储多个值
e {a: {1, 2, 3},b: {4, 5}
}选择要使用列表还是集合取决于应用的意图。
如果希望保存元素插入的顺序建议使用列表。如果希望消除重复元素且不介意乱序建议使用集合。
而在 python 中提供 collections 模块可以方便地创建这样的字典。
from collections import defaultdictd defaultdict(list)
d[a].append(1)
d[a].append(2)
d[b].append(4)
...
b defaultdict(set)
b[a].add(1)
b[a].add(2)
b[b].add(4)
...关于 defaultdict 需要注意的是其会自动初始化第一个值这样只需关注添加元素即可。
讨论
其实原则上构建一个一键多值的字典是很容易的。但是在初始化操作中就能体现出 collections 模块的优势所在。
pairs [(apple, fruit),(carrot, vegetable),(apple, red)
]d {}
for key, value in pairs:if key not in d:d[key] []d[key].append(value)上述代码中循环遍历 pairs 中的每个元素。
if key not in d检查 d 中是否已经有了这个 key。如果没有d[key] [] 在 d 中创建一个新的键值对其中键是 key值是一个空列表。d[key].append(value) 则是将 value 追加到与 key 相关联的列表中。最终d 会包含从 pairs 中提取的所有键值对其中每个键都映射到一个可能包含多个值的列表。
而下述代码实现同样的功能通过调用 collections.defaultdict 函数。
pairs [(apple, fruit),(carrot, vegetable),(apple, red)
]for key, value in pairs:d[key].append(value)