3

本当に奇妙なことが起こっています。フィールドキーに関連する特定の値を持つすべてのアイテムを見つけるために、一連の辞書をループしようとしています。次のようにします。

ex_set は、私が制御できない mysql システムからの出力です。Python を使用して再作成する必要がある場合は、次のようになります。

dict_a [ 'field' ] = 'fruit'
dict_a [ 'value' ] = 'apple'
dict_b [ 'field' ] = 'fruit'
dict_b [ 'value' ] = 'berry'
ex_set = set()
ex_set.add (dict_a,dict_b)

重要なのは、セットを印刷したときにどのように見えるかです。

pprint (ex_set)
OUTPUTS> ({'field' : 'fruit',
        'value' : 'apple'},
        'field' : 'fruit'},
        'value' : 'berry'})

i = 0
while len ( ex_set ) > i:
    for k , v in ex_set [i].iteritems ( ):
        if v == 'fruit':
        pprint ( ex_set[i] )
    i += 1

問題は、これを印刷しても、値が "fruit" であるすべての辞書が印刷されないことです。

一連の辞書を検索するより良い方法はありますか? 私が検索しているセットには、各辞書に 3 つのキーと値の組み合わせがあり、約 30,000 の辞書があります。これは約 25% の確率で機能しますが、一致の約 20% しか返されない理由がわかりません。

助けてくれてありがとう!

4

1 に答える 1

2

あなたの説明に基づいて、あなたは次のようなものを探しています:

In [6]: ex_set = ({'fruit':'apple',
   ...:            'value':'fruit'},
   ...:           {'fruit':'fruit'},
   ...:           {'apple':'apple'})

In [7]: for d in ex_set:
   ...:     if 'fruit' in d.values():
   ...:         print(d)
   ...:         
{'fruit': 'apple', 'value': 'fruit'}
{'fruit': 'fruit'}

また、あなたの例が有効な python ではないという事実に加えて、ex_set はハッシュ化できないため、含むことができないため、確かに asetsets'sすることはできませdictionariesん。より適切な名前に変更することを検討します。

In [8]: set([{}])
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-8-7facc835553f> in <module>()
----> 1 set([{}])

TypeError: unhashable type: 'dict'
于 2013-01-23T06:06:40.493 に答える