Python3 получить ключи от значений? - PullRequest
0 голосов
/ 30 июля 2011

Кажется, это обычная проблема, но я не могу найти решение.

У меня есть скрипт Python3, содержащий два словаря sqldict и hitsdict. Этот код выводит значения словаря, если sqldict[value][0] == hitsdict[thing][1].

for value in sqldict:
        for thing in hitsdict:
            if sqldict[value][0] == hitsdict[thing][1]:
                print(hitsdict[thing][1],sqldict[value][5])

Я также хотел бы получить ключи, связанные со значениями, которые соответствуют сопоставлению sqldict[value][0] == hitsdict[thing][1], но я не могу понять, как получить связанные ключи? Я пытался сделать что-то вроде этого:

for key, value in sqldict.items():
        for thing in hitsdict:
            if sqldict[value][0] == hitsdict[thing][1]:
                            print(key,hitsdict[thing][1],sqldict[value][5])

Может кто-нибудь объяснить, в чем заключается моя проблема и как я могу получить ключи от значений, которые соответствуют моему, если sqldict[value][0] == hitsdict[thing][1] сравнение? Спасибо!

EDIT: У меня была идея добавить ключ как дополнительное значение. Есть ли другой более питонический способ?

Ответы [ 3 ]

1 голос
/ 30 июля 2011

Вы находите значения, просматривая элементы в словаре.Это неправильный путь.Цель словаря - использовать ключи для поиска.

Короче говоря, ваша структура данных полностью испорчена.Поскольку мы не знаем, как это выглядит, мы не можем сказать вам, как это должно выглядеть, но, с другой стороны, у вас есть слово «sql» в одном из значений.

Могу ли я предложить вамиспользовать SQL-запросы, чтобы делать то, что вы делаете вместо этого?

1 голос
/ 30 июля 2011

Поиск в словаре «по ключу», а не «по значению».

>>> d = {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}
>>> for key in d:
...     print key
... 
key3
key2
key1

Извините, но я не могу думать ни о каком другом ответе, кроме "Ты делаешь это с самого начала!"

0 голосов
/ 31 июля 2011

Вы можете использовать то, что я буду называть "обратными диктовками".Моя идея состоит в том, что вы создаете два словаря:

dict1 = {key1: value1, key2: value2, ...}
dict1_inv = {value1: key1, value2: key2, ...}

Теперь вы можете быстро получить значение, связанное с каждым ключом, и обратный ключ:, связанный с каждым значением.

Я не знаю, еслиэто "Pythonic", но, насколько я понимаю, следует решить вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...