【问题标题】:How can I get the correct value from a dictionary with another list as keys?如何从以另一个列表为键的字典中获取正确的值?
【发布时间】:2018-11-10 17:06:43
【问题描述】:

我尽力寻找其他答案,但我不知道该怎么做。

我有一本这样的字典:

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 中的 key:value 对应。

像这样:

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

我尝试将 newlist 转换为元组,但我不明白如何将元组用作字典中的键。

感谢任何帮助!

【问题讨论】:

    标签: python list dictionary tuples


    【解决方案1】:

    使用dict.getlist 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']
    

    【讨论】:

    • 谢谢!正是我需要的。
    【解决方案2】:

    下面也是做同样的另一种方法。

    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']
    

    【讨论】:

      【解决方案3】:

      如果namedct 的值本身是字典、元组或命名元组,这将更方便。 此外,如果您的键是从零开始的连续数字,则列表可能更合适,因此如下所示:

      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]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-08-08
        • 1970-01-01
        • 2019-12-16
        • 2020-03-31
        • 1970-01-01
        • 2018-12-03
        • 1970-01-01
        • 2017-09-18
        相关资源
        最近更新 更多