22

2つの整数値に基づいて辞書に値を格納および検索できるようにしたい。

したがって、値を検索するときは、次のように、キーを使用しread_lengthmin_size要素にアクセスします。

number_of_read_lengths[read_length][min_size]

ネストされた辞書を作成できることは知っていますが、それは少し面倒です。

私がやりたいことをする簡単な方法はありますか?

4

5 に答える 5

38

タプルを含む、不変でハッシュ可能な任意のオブジェクトをキーとして使用できます

number_of_read_lengths = {}

number_of_read_lengths[14,3] = "Your value"
于 2012-10-25T09:22:42.077 に答える
4

タプルの使用は非常に煩わしい場合があります。インデックス作成中にタプルを配置することを忘れないでください。

ネストされたdictをお勧めしますがdefaultdict、次のようになります。

from collections import defaultdict

number_of_read_lengths = defaultdict(dict)

number_of_read_lengths[1][2] = 3

print(number_of_read_lengths)

このコードは次のようになります。

defaultdict(<type 'dict'>, {1: {2: 3}})

このように、dictに存在しない要素は、number_of_read_lengthsアクセスまたは設定するときにdictとして作成されます。シンプルで効果的。

詳細情報defaultdicthttp ://docs.python.org/library/collections.html#collections.defaultdict 例もあります:http://docs.python.org/library/collections.html#defaultdict-examples

于 2012-10-25T09:34:06.650 に答える
3

タプルをキーとして使用することができます。

number_of_read_lengths[(read_length, min_size)]
于 2012-10-25T09:23:25.653 に答える
3

私が行ったコメントからもう少し拡張するために:

dictキーはハッシュ可能である必要があります。これは単純なタプルです。ただし、リストなどのハッシュ不可能な値を含むタプルは、ハッシュ可能ではないため(不変ですが!)、dictキーとして使用することはできません。

>>> bad = ([12],[32])
# still immutable
>>> bad[1] = [21]
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment

# but not hashable!
>>> d = {}
>>> d[bad] = 2
Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: unhashable type: 'list'

可変オブジェクトとハッシュオブジェクトをキーとして使用することもできdictますが、実際には有用ではないため、避ける必要があります。

于 2012-10-25T09:36:21.897 に答える
0

これは、二重索引辞書を定義する別の方法です。私にとっては、他の方法よりもこれを視覚化する方が簡単です。

dict_dict_v2 = {}
dict_dict_v2.setdefault(2, {})
dict_dict_v2.setdefault(3, {})
dict_dict_v2[2]['1.1.1.1'] = {}
dict_dict_v2[2]['1.0.1.0'] = {}
dict_dict_v2[3]['1.1.1.1'] = "double"
dict_dict_v2[3]['1.0.1.0'] = 12    

dict_dict_v2[2]['1.1.1.1']['mac']=1111
dict_dict_v2[2]['1.1.1.1']['id']=1111

dict_dict_v2[2]['1.0.1.0']['id']=1010

print str(dict_dict_v2)
"""output: 
{1: {'1.0.0.0': {'mac': 1010, 'id': 1000}, '1.1.1.1': {'mac': 1111}}, 
 2: {'1.1.1.1': {'mac': 1111, 'id': 1111}, '1.0.1.0': {'id': 1010}}, 
 3: {'1.1.1.1': 'double', '1.0.1.0': 12}}
"""

dictの基本関数は次のように使用できます。

print "len-> "+str(len(dict_dict_v2[2]))
print "keys-> "+str(dict_dict_v2[2].keys())
print "values-> "+str(dict_dict_v2[2].values())
"""output: 
len-> 2
keys-> ['1.1.1.1', '1.0.1.0']
values-> [{'mac': 1111, 'id': 1111}, {'id': 1010}]
"""
print "len for 1.1.1.1-> "+str(len(dict_dict_v2[2]['1.1.1.1']))
print "keys for 1.1.1.1-> "+str(dict_dict_v2[2]['1.1.1.1'].keys())
print "values for 1.1.1.1-> "+str(dict_dict_v2[2]['1.1.1.1'].values())
"""output: 
len for 1.1.1.1-> 2
keys for 1.1.1.1-> ['mac', 'id']
values for 1.1.1.1-> [1111, 1111]
"""
于 2015-08-04T16:53:54.203 に答える