如何为 python 字典中的键设置多个值?
How to have multiple values for a key in a python dictionary?
我有一个情况,同一个键可能有不同的字符串与之关联。
例如flow 和 wolf 都有相同的字符,如果我对它们进行排序并将它们用作字典中的键,我想将原始字符串作为值。
我在 python 字典中试过:
d = {}
d["flow"] = flow
d["flow"] = wolf
但是只有一个值与键关联。
我试过 d["flow"].append("wolf")
但还是不行。
如何让这个场景与 Python 指令一起工作?
字典中不能有多个条目具有相同的键。你应该做的是使值成为 list
。像这样-
d = dict()
d["flow"] = ["flow"]
d["flow"].append("wolf")
如果那是你想要做的,那么你可能想要使用 defaultdict
。那么你可以做
from collections import defaultdict
d = defaultdict(list)
d["flow"].append("flow")
d["flow"].append("wolf")
您可以实现一个 dict-like class 来实现这一点。
class MultiDict:
def __init__(self):
self.dict = {}
def __setitem__(self, key, value):
try:
self.dict[key].append(value)
except KeyError:
self.dict[key] = [value]
def __getitem__(self, key):
return self.dict[key]
这是您的使用方法
d = MultiDict()
d['flow'] = 'flow'
d['flow'] = 'wolf'
d['flow'] # ['flow', 'wolf']
您可以使用 setdefault
方法为 key
创建一个列表作为 value
即使 key
是 字典中没有。
所以这使得代码非常简单:
>>> d = {}
>>> d.setdefault(1, []).append(2)
>>> d.setdefault(1, []).append(3)
>>> d.setdefault(5, []).append(6)
>>> d
{1: [2, 3], 5: [6]}
我有一个情况,同一个键可能有不同的字符串与之关联。
例如flow 和 wolf 都有相同的字符,如果我对它们进行排序并将它们用作字典中的键,我想将原始字符串作为值。
我在 python 字典中试过:
d = {}
d["flow"] = flow
d["flow"] = wolf
但是只有一个值与键关联。
我试过 d["flow"].append("wolf")
但还是不行。
如何让这个场景与 Python 指令一起工作?
字典中不能有多个条目具有相同的键。你应该做的是使值成为 list
。像这样-
d = dict()
d["flow"] = ["flow"]
d["flow"].append("wolf")
如果那是你想要做的,那么你可能想要使用 defaultdict
。那么你可以做
from collections import defaultdict
d = defaultdict(list)
d["flow"].append("flow")
d["flow"].append("wolf")
您可以实现一个 dict-like class 来实现这一点。
class MultiDict:
def __init__(self):
self.dict = {}
def __setitem__(self, key, value):
try:
self.dict[key].append(value)
except KeyError:
self.dict[key] = [value]
def __getitem__(self, key):
return self.dict[key]
这是您的使用方法
d = MultiDict()
d['flow'] = 'flow'
d['flow'] = 'wolf'
d['flow'] # ['flow', 'wolf']
您可以使用 setdefault
方法为 key
创建一个列表作为 value
即使 key
是 字典中没有。
所以这使得代码非常简单:
>>> d = {}
>>> d.setdefault(1, []).append(2)
>>> d.setdefault(1, []).append(3)
>>> d.setdefault(5, []).append(6)
>>> d
{1: [2, 3], 5: [6]}