Как я могу получить правильное значение из словаря с другим списком в качестве ключей? - PullRequest
0 голосов
/ 10 ноября 2018

Я старался изо всех сил искать другие ответы, но мне не удалось выяснить, как я могу это сделать.

У меня есть такой словарь:

namedict = {'0': 'female\tLotta\tAskildsen', '1': 'male\tHendrich\tDyb', '2': 'female\tRut\tAase', '3': 'male\tSigve\tBuer', '4': 'female\tBetina\tDimmen', '5': 'male\tOsvald\tAndvik', '6': 'female\tGunnbjørg\tAarset', '7': 'male\tMorten\tAlm', '8': 'female\tInes\tAbelsen', '9': 'male\tStian\tBerthelsen', '10': 'male\tGulbrand\tBrekka', '11': 'male\tHåvar\tClaussen', '12': 'female\tThi\tAslam', '13': 'female\tAslaug\tDuong', '14': 'female\tTora\tChristensen', '15': 'male\tLucas\tDrevland', '16': 'male\tOluf\tBirkedal', '17': 'male\tHalvar\tByberg', '18': 'male\tLeif\tBach', '19': 'female\tAyse\tBaltzersen', '20': 'female\tAnastasia\tBergli', '21': 'male\tRonald\tAasberg', '22': 'female\tElly\tDehli', '23': 'female\tElizabeth\tAalberg', '24': 'male\tRunar\tAsk'}

Я хотел бы использовать другой список:

mylist = ['16', '17', '18', '19', '20', '21', '22', '23', '15']

И получите новый список с именами, соответствующими ключу: значение в namedict.

Как это:

newlist = ['Oluf\tBirkedal', 'Halvar\tByberg', 'Leif\tBach', --->] 

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

Ценю любую помощь!

Ответы [ 3 ]

0 голосов
/ 10 ноября 2018

Ниже приведен еще один способ сделать то же самое.

namedict = {'0': 'female\tLotta\tAskildsen', '1': 'male\tHendrich\tDyb', '2': 'female\tRut\tAase', '3': 'male\tSigve\tBuer', '4': 'female\tBetina\tDimmen', '5': 'male\tOsvald\tAndvik', '6': 'female\tGunnbjørg\tAarset', '7': 'male\tMorten\tAlm', '8': 'female\tInes\tAbelsen', '9': 'male\tStian\tBerthelsen', '10': 'male\tGulbrand\tBrekka', '11': 'male\tHåvar\tClaussen', '12': 'female\tThi\tAslam', '13': 'female\tAslaug\tDuong', '14': 'female\tTora\tChristensen', '15': 'male\tLucas\tDrevland', '16': 'male\tOluf\tBirkedal', '17': 'male\tHalvar\tByberg', '18': 'male\tLeif\tBach', '19': 'female\tAyse\tBaltzersen', '20': 'female\tAnastasia\tBergli', '21': 'male\tRonald\tAasberg', '22': 'female\tElly\tDehli', '23': 'female\tElizabeth\tAalberg', '24': 'male\tRunar\tAsk'}
mylist = ['16', '17', '18', '19', '20', '21', '22', '23', '15']

new_list = [(namedict[i].split("\t")[1]+"\t"+namedict[i].split("\t")[2]) for i in mylist]
print(new_list)

Выход:

['Oluf\tBirkedal', 'Halvar\tByberg', 'Leif\tBach', 'Ayse\tBaltzersen', 'Anastasia\tBergli', 'Ronald\tAasberg', 'Elly\tDehli', 'Elizabeth\tAalberg', 'Lucas\tDrevland']
0 голосов
/ 10 ноября 2018

Это будет более удобно, если значения namedct сами по себе являются dict, кортежами или именованными кортежами. Кроме того, если ваши ключи представляют собой последовательные числа, начинающиеся с нуля, список может быть более подходящим, поэтому что-то вроде этого:

name_list = [
    ('male', 'Foo', 'Bar'),
    ('female', 'Spam', 'Baz'),
    # ...
]

Затем вы можете извлечь значения индексов в mylist примерно так:

[name_list[i][1:] for i in mylist]

Если вы хотите сохранить символ табуляции:

['\t'.join(name_list[i][1:]) for i in mylist]
0 голосов
/ 10 ноября 2018

Используйте dict.get с list comprehesion как:

newlist = [namedict.get(value).split('\t',1)[1] for value in mylist]

print(newlist)
['Oluf\tBirkedal',
 'Halvar\tByberg',
 'Leif\tBach',
 'Ayse\tBaltzersen',
 'Anastasia\tBergli',
 'Ronald\tAasberg',
 'Elly\tDehli',
 'Elizabeth\tAalberg',
 'Lucas\tDrevland']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...