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]
タプルのリストがある場合は、タプルリストから辞書を作成し、次のように最初の要素をdictキーとして使用できます。
>>> 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']
タプルキーを使用して辞書に部分的にインデックスを付けることはできません。挿入に使用したデータを抽出するには、同じキーを使用する必要があります。
ただし、別のアプローチは、ネストされた辞書を使用することです。つまり、単一のタプル()でインデックスを作成するのではなく、values[key1,key2]
2回インデックスを作成します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}
内部ディクショナリの1つの値だけが必要な場合は、次のvalues
方法を使用して取得できます。
>>> d[1].values()
dict_values([2, 3, 4])
Python 3では、dict.values
反復可能な「ビュー」オブジェクトを返します。実際のリストが必要な場合は、values
呼び出しをリストコンストラクターでラップするだけです(値の順序は任意であることに注意してください)。
>>> list(d[1].values())
[2, 3, 4]