使用 Python,我创建了一个由元组索引的列表:
return values[(a, b)]
但是,有时我想传入(a, _)
我不在乎的值b
是什么的地方,并接收所有可能索引的列表。
如:
values[(dog, _)] => returns [(dog, Mike), (dog, Sam), (dog, Edward)]
这在 Python 中可能吗?
使用 Python,我创建了一个由元组索引的列表:
return values[(a, b)]
但是,有时我想传入(a, _)
我不在乎的值b
是什么的地方,并接收所有可能索引的列表。
如:
values[(dog, _)] => returns [(dog, Mike), (dog, Sam), (dog, Edward)]
这在 Python 中可能吗?
您必须使用键的确切值来索引字典。
要查找多个键,您需要遍历它们:
[k for k in my_dict if k[0] == dog]
您不能使用元组键对字典进行部分索引。您必须使用相同的密钥来提取用于插入它的数据。
但是,另一种方法是使用嵌套字典。也就是说values[key1,key2]
,您将索引两次,而不是使用单个元组 ()进行索引values[key1][key2]
。如果你只提供第一个键,你会得到一个包含数据的内部字典。
这是一个例子:
>>> d = {1: {1: 2, 2: 3, 3: 4}, 2: {2: 1, 3: 2, 4: 3}}
>>> d[1][1]
2
>>> d[1]
{1: 2, 2: 3, 3: 4}
如果您只想要一个内部字典的值,您可以使用以下values
方法获取它:
>>> d[1].values()
dict_values([2, 3, 4])
在 Python 3 中,dict.values
返回一个可迭代的“视图”对象。如果您需要一个真正的列表,只需将values
调用包装在列表构造函数中(请注意值的顺序是任意的):
>>> list(d[1].values())
[2, 3, 4]
如果你有一个元组列表,那么你可以简单地从元组列表中创建一个字典,并将第一个元素用作字典键,如下所示:
>>> import collections
>>> l = [('a', 'foo'), ('a', 'bar'), ('b', 'hello')]
>>> d = collections.defaultdict(list)
>>> for k, v in l:
... d[k].append(v)
...
>>> d
defaultdict(<type 'list'>, {'a': ['foo', 'bar'], 'b': ['hello']})
>>> d['a']
['foo', 'bar']