Возврат ключей словаря на основе целочисленного значения списка - PullRequest
0 голосов
/ 11 мая 2018

У меня есть следующее:

my_list = ["7777777", "888888", "99999"]
my_dict = {21058199: '500', 7777777: '500', 21058199: '500'}

Я пытаюсь создать новый словарь, который будет включать значение словаря (из исходного словаря), которое соответствует записи списка ключу словаря (в оригиналесловарь)

for k in my_dict.keys():
  if k in my_list:
      new_dict.append(k)

print(new_dict)        

должен вернуть

7777777: '500'

Но я возвращаю пустой набор.Я не уверен, что я делаю не так здесь

Ответы [ 4 ]

0 голосов
/ 11 мая 2018

Попробуй так:

my_list = ["7777777", "888888", "99999"]
my_dict = {21058199: '500', 7777777: '500', 21058199: '500'}

new_dict = {k:my_dict[k] for k in my_dict.keys() if str(k) in my_list}
print(new_dict)

# {7777777: '500'}

Обновление:

Вы также можете сделать это с помощью функции project из библиотеки funcy .

from funcy import project

new_dict = project(my_dict, map(int, my_list))
print(new_dict)
0 голосов
/ 11 мая 2018

Ваши ключи словаря имеют тип Int, а ваши элементы списка - строки. Вам нужно конвертировать одно в другое.

например:

new_dict = {}
for k in my_dict.keys():
    if str(k) in my_list:
        new_dict[k] = my_dict[k]

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

0 голосов
/ 11 мая 2018

Понимание словаря даст вам то, что вам нужно.

  • Вы должны убедиться, что типы совпадают (int против str)
  • Если список не являетсязначительно дольше, чем dict, будет гораздо эффективнее перебирать список и проверять, находится ли ключ в dict, чем наоборот.

Например:

In []:
new_dict = {k: my_dict[k] for k in map(int, my_list) if k in my_dict}
print(new_dict)

Out[]:
{7777777: '500'}
0 голосов
/ 11 мая 2018

Вы должны int() итератор.

my_list = ["7777777", "888888", "99999"]
my_dict = {21058199: '500', 7777777: '500', 21058199: '500'}

for l_i in my_list:
    if l_i in my_dict:
        print(my_dict[int(l_i)])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...