Изменить список в соответствии с элементами словаря - PullRequest
0 голосов
/ 29 апреля 2020

Здравствуйте, у меня есть список, который выглядит следующим образом:

>>>ids
 '70723295',
 '75198124',
 '140',
 '199200',
 '583561',
 '71496270',
 '69838760',
 '70545907',
 ...]

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

Я пытался:

with open('/home/anja/Schreibtisch/Master/ABA/alltogether/filelist.txt') as f:
    ids = [line.strip() for line in f.read().split('\n')]

rev_subs = { v:k for v,k in dictionary.items()}
new_list=[rev_subs.get(item,item)  for item in ids]

#dict looks like:
 '16411': 'Itgax',
 '241041': 'Gm4956',
 '22419': 'Wnt5b',
 '20174': 'Ruvbl2',
 '71833': 'Dcaf7',
 ...}

Но new_list по-прежнему идентичен идентификаторам.

Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 29 апреля 2020

Ваши ключи словаря являются bs4.element.NavigableString объектами, а не строками, поэтому вы не можете использовать строки в качестве ключей для поиска его значений.

Это можно исправить, преобразовав ключи в строки при сборке rev_subs :

rev_subs = {str(k): v for k, v in dictionary.items()}
0 голосов
/ 29 апреля 2020

Может быть, ключи словаря не в том формате, который вы думаете? Возможно, словарь содержит целые числа, а идентификаторы - это строки. Я бы расследовал это, кажется, что несоответствие типов больше, чем пустой (или не соответствующий) словарь.

...