1

ユニオン、差分、交差操作を利用するために、frozensets を使用して辞書のキーを保持しています。しかし、dict.get() を介してディクショナリからキーで値を取得しようとすると、None 値が返されます。

newDict = {'a': 1, 'b': 2, 'c': 3, 'd': True}
stKeys = set(newDict)
stA = frozenset('a')
stB = frozenset('b')
stC = frozenset('c')
stD = frozenset('d')

print(stKeys)
print(newDict.get(stA & stKeys))
print(newDict.get(stB & stKeys))
print(newDict.get(stC & stKeys))
print(newDict.get(stD & stKeys))

生産:

>>>None
>>>None
>>>None
>>>None

さらには:

print(newDict.get(stA))
print(newDict.get(stB))
print(newDict.get(stC))
print(newDict.get(stD))

生産:

>>>None
>>>None
>>>None
>>>None

キーがフリーズセットにある場合、辞書から値を取得する方法は?

Martijn Pietersに感謝します。結果を list() に追加する場合の答えは、DVO (Dictionary view objects) とジェネレータ式です。

4

3 に答える 3

2

セットの交差点を探したい場合は、ディクショナリ ビュー オブジェクトを使用できます。

for key in newDict.viewkeys() & stA:
    # all keys that are in the intersection of stA and the dictionary

Python 3 では、ディクショナリ ビューを返すことがデフォルトです。ここで使用できnewDict.keys()ます:

for key in newDict.keys() & stA:
    # all keys that are in the intersection of stA and the dictionary

Python 3 のデモ:

>>> newDict = {'a': 1, 'b': 2, 'c': 3, 'd': True}
>>> stA = frozenset('a')
>>> stB = frozenset('b')
>>> stC = frozenset('c')
>>> stD = frozenset('d')
>>> newDict.keys() & stA
{'a'}
>>> for key in newDict.keys() & stA:
...     print(newDict[key])
... 
1
于 2015-04-05T15:57:04.977 に答える
1

フリーズ セット キーを作成するには、実際にフリーズ セットを作成し、それらをキーとして使用する必要があります。

newDict = {
    frozenset('a'): 1,
    frozenset('b'): 2,
    frozenset('c'): 3,
    frozenset('d'): True
}

テスト:

>>> {frozenset('a'):1}[frozenset('a')]
1
于 2015-04-05T15:52:16.357 に答える