代码之家  ›  专栏  ›  技术社区  ›  Dark Patate

如何根据另一个键获得元素的键

  •  0
  • Dark Patate  · 技术社区  · 5 年前

    我有一本那种形状的词典(打印时):

    {
     1:{'id':1,
        'name':'car'
        },
     2:{'id':2,
        'name':'train'
        },
        ...
     6:{'id':6,
        'name'='chocolate'
        }
    }
    

    提前谢谢。

    4 回复  |  直到 4 年前
        1
  •  1
  •   Rockcat    5 年前

    最好的方法是使用 Comprehension List 表达方式如下:

    myDict = {
     1:{'id':1,
        'name':'car'
        },
     2:{'id':2,
        'name':'train'
        },
     6:{'id':6,
        'name'='chocolate'
        }
    }
    
    #In python3
    ids = [x['id'] for x in myDict.values() if x['name'] == 'chocolate' ]
    
    #In python2
    ids = [x['id'] for k,x in myDict.items() if x['name'] == 'chocolate' ]
    

        2
  •  0
  •   Sreeram TP    5 年前

    d = {
     1:{'id':1,
        'name':'car'
        },
     2:{'id':2,
        'name':'train'
        },
     6:{'id':6,
        'name':'chocolate'
        }
    }
    
    for key, val_dict in d.items():
        if val_dict['name'] == 'chocolate':
            print(val_dict['id'])
    

    你可以用这个单列表来理解,

    [val_dict['id'] for key, val_dict in d.items() if val_dict['name'] == 'chocolate']
    
        3
  •  0
  •   Dariusz Krynicki    5 年前
    import pandas as pd
    
    dd = {1:{'id':1,'name':'car'}, 2:{'id':2, 'name':'train'},6:{'id':6,'name':'chocolate'}}
    df = pd.DataFrame(dd).T
    df.loc[df['name'] == 'chocolate']['id'].tolist().pop()
    

    编辑:

    [v['id'] for k,v in dd.items() if v['name'] == 'chocolate'].pop()
    
        4
  •  0
  •   balderman    5 年前

    如果您需要在代码中多次询问“巧克力的id是什么”的问题,那么您应该考虑使用一个反向dict,它将以更多内存分配的代价为您提供最佳性能。

    reverse_data = {'car':1,'train':2,'chocolate':6}
    print(reverse_data['chocolate'])
    

    输出

    6