Соответствие между индексами списка происходит из словаря - PullRequest
0 голосов
/ 18 марта 2012

Я написал следующий код, работающий со словарем и списком:

d = computeRanks() # dictionary of id : interestRank pairs
lst = list(d) # tuples (id, interestRank)
interestingIds = []
for i in range(20): # choice randomly 20 highly ranked ids
  choice = randomWeightedChoice(d.values()) # returns random index from list
  interestingIds.append(lst[choice][0])

Возможно, есть ошибка, потому что я не уверен, есть ли соответствие между индексами в lst и d.values ​​() .

Вы знаете, как написать это лучше?

Ответы [ 2 ]

3 голосов
/ 18 марта 2012

Одна из политик dict заключается в том, что результаты dict.keys() и dict.values() будут соответствовать , пока содержимое словаря не изменяется .

0 голосов
/ 18 марта 2012

Как говорит @Ignacio, индекс choice действительно соответствует предполагаемому элементу lst, поэтому логика вашего кода верна. Но ваш код должен быть намного проще: d уже содержит идентификаторы для элементов, поэтому перепишите randomWeightedChoice, чтобы взять словарь и вернуть идентификатор.

Возможно, это поможет вам узнать, что вы можете перебирать пары ключ-значение словаря с помощью d.items():

for k, v in d.items():
    etc.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...