1

Python で人の姓をキーとする辞書があり、各キーには複数の値がリンクされています。forループを使用して辞書を反復処理して特定の値を検索し、値がリンクされているキーを返す方法はありますか?

for i in people:
      if people[i] == criteria: #people is the dictionary and criteria is just a string
            print dictKey #dictKey is just whatever the key is that the criteria matched element is linked to

複数の一致もあるかもしれないので、複数のキーを出力する必要があります。

4

5 に答える 5

4

リスト内包表記を使用できます

print [key
          for people in peoples
          for key, value in people.items()
          if value == criteria]

これにより、値が基準に一致するすべてのキーが出力されます。辞書ならpeople

print [key
          for key, value in people.items()
          if value == criteria]
于 2013-11-04T06:59:36.477 に答える
2

姓と特徴の辞書が与えられた場合:

>>> people = {
    'jones': ['fast', 'smart'],
    'smith': ['slow', 'dumb'],
    'davis': ['slow', 'smart'],
}

リスト内包表記は、いくつかの基準に一致するすべての姓をうまく見つけます。

>>> criteria = 'slow'
>>> [lastname for (lastname, traits) in people.items() if criteria in traits]
['davis', 'smith']

ただし、そのようなルックアップを何度も行う場合は、特性を一致する姓のリストにマップする逆辞書を作成する方が高速です。

>>> traits = {}
>>> for lastname, traitlist in people.items():
        for trait in traitlist:
            traits.setdefault(trait, []).append(lastname)

これで、条件検索をすばやくエレガントに実行できます。

>>> traits['slow']
['davis', 'smith']
>>> traits['fast']
['jones']
>>> traits['smart']
['jones', 'davis']
>>> traits['dumb']
['smith']
于 2013-11-04T07:34:15.400 に答える
2

これを使って:

for key, val in people.items():
    if val == criteria:
        print key
于 2013-11-04T07:05:51.553 に答える
1
for i in people:
  if people[i] == criteria:
        print i

iあなたの鍵です。これが、辞書の反復処理の仕組みです。ただし、キーを特定の順序で出力したい場合は、結果をリストに保持し、出力する前にソートする必要があることに注意してください。辞書は、保証された順序でエントリを保持しません。

于 2013-11-04T06:59:25.367 に答える