2

使用 Python,我创建了一个由元组索引的列表:

return values[(a, b)]

但是,有时我想传入(a, _)我不在乎的值b是什么的地方,并接收所有可能索引的列表。

如:

values[(dog, _)] => returns [(dog, Mike), (dog, Sam), (dog, Edward)]

这在 Python 中可能吗?

4

3 回答 3

2

您必须使用键的确切值来索引字典。

要查找多个键,您需要遍历它们:

[k for k in my_dict if k[0] == dog]
于 2013-02-08T07:02:11.000 回答
1

您不能使用元组键对字典进行部分索引。您必须使用相同的密钥来提取用于插入它的数据。

但是,另一种方法是使用嵌套字典。也就是说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]
于 2013-02-08T07:14:40.743 回答
1

如果你有一个元组列表,那么你可以简单地从元组列表中创建一个字典,并将第一个元素用作字典键,如下所示:

>>> 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']
于 2013-02-08T07:08:23.450 回答