b91*_*007 12 python dictionary key
我需要一个字典,它可能对某些键具有相同的名称,并在这种情况下引用键时返回值列表.例如
print mydict['key']
[1,2,3,4,5,6]
Run Code Online (Sandbox Code Playgroud)
Kat*_*iel 14
为了保持一致性,您应该使用字典映射键来列出(或设置)值,其中一些可以为空.这有一个很好的习语:
from collections import defaultdict
d = defaultdict(set)
d["key"].add(...)
Run Code Online (Sandbox Code Playgroud)
(A defaultdict
就像一个普通的字典,但是如果缺少一个键,它将调用您在实例化时传入的参数并将结果用作默认值.所以如果你要求一个值,这将自动创建一组空值尚未出现的钥匙.)
如果您需要对象看起来更像字典(即设置值d["key"] = ...
),您可以执行以下操作.但这可能是一个坏主意,因为它违反了普通的Python语法,并且很可能会在以后回来并咬你.特别是如果其他人必须维护您的代码.
class Multidict(defaultdict):
def __init__(self):
super(Multidict, self).__init__(set)
def __setitem__(self, key, value):
self[key].add(value)
Run Code Online (Sandbox Code Playgroud)
我没有测试过这个.
say*_*yap 11
你也可以试试 paste.util.multidict.MultiDict
$ easy_install Paste
Run Code Online (Sandbox Code Playgroud)
然后:
from paste.util.multidict import MultiDict
d = MultiDict()
d.add('a', 1)
d.add('a', 2)
d.add('b', 3)
d.mixed()
>>> {'a': [1, 2], 'b': 3}
d.getall('a')
>>> [1, 2]
d.getall('b')
>>> [3]
Run Code Online (Sandbox Code Playgroud)
像Pylons这样的Web框架正在使用此库来处理HTTP查询字符串/发布数据,这些数据可以具有相同的名称密钥.
您可以使用:
myDict = {'key': []}
Run Code Online (Sandbox Code Playgroud)
然后在运行时:
if newKey in myDict:
myDict[newKey].append(value)
else:
myDict[newKey] = [value]
Run Code Online (Sandbox Code Playgroud)
根据@ Ben的评论编辑:
myDict = {}
myDict.setdefault(newKey, []).append(value)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
14854 次 |
最近记录: |