2016-06-03 1 views
1

У меня есть небольшой образец набора данных:словарь не возвращается ни при должно быть питон значение

import pandas as pd 


df = {'ID': ['H576','H577','H578','H600', 'H700'], 
    'CD': ['AAAAAAA', 'BBBBB', 'CCCCCC','DDDDDD', 'EEEEEEE']} 

df = pd.DataFrame(df) 

Я прочитал это с пандами и превратить эти 2 колонки в словарь с «ID» является ключевым и «CD» является значением:

dictionary = df.set_index('ID')['CD'].to_dict() 

потому, что мне нужно делать другие вещи (которые я не буду вдаваться в подробности, это длинная история, и мой фактический сценарий длинный сценарий, который включает в себя множество других вещей), мне нужно для сохранения словаря в виде пар ключей значений, отменено:

reversedic = dict() 
for key, val in dictionary.items(): 
     reversedic.pop(val, key) #python 2.7 uses dic.append() but for the python I have which is 3.5, 'dict' object has no attribute 'append', so is pop the correct code? 

позже в моем большем сценарии мне нужно будет получить «ID», когда заданное значение марки «CD»

z = reversedic.get('AAAAAAA') 
print(z) 

это должно быть возвращено H576, но он не вернулся «ни один» вместо этого.

+2

Есть причина, вы не можете просто напрямую создать обратный словарь с пандами, то есть 'reversedic = df.set_index ('CD ') [' ID ']. to_dict() '? – root

+0

Это хорошая точка – Jessica

ответ

3

Почему не напрямую:

reverseDict = {v:k for k,v in dictionary.iteritems()} 

In [14]: reverseDict['AAAAAAA'] 
Out[14]: 'H576' 
2

Из документов о dict.pop():

поп (клавиша [, по умолчанию])

Если ключ в словаре, удалить его и вернуть его стоимость, остальное возвращение по умолчанию. Если значение по умолчанию не задано, а ключ отсутствует в словаре, возникает KeyError.

Если вы хотите добавить пару ключ-значение в словаре, используйте

reversedic[key] = val 
+0

Это клавиша удаления из dict, не возвращающая значение ключа. Это то, что OP хочет сократить dict. – Merlin

2

pop() возвращает значение для key переданного ему. Второй параметр - значение по умолчанию, которое возвращается, если key нет в словаре.

Вы можете просто сделать:

reversedic[key] = value 
1

С создания первого Dict таким образом

dictionary = df.set_index('ID')['CD'].to_dict() 

Почему нет?

reversedic = df.set_index('CD')['ID'].to_dict() 

Тогда:

z = reversedic.get('AAAAAAA') 
print(z) 

или

z = reversedic['AAAAAAA'] 
print(z) 
+1

Это на самом деле самый простой способ, но поскольку мой вопрос спрашивает о делеффе. вещь, я принял чужой ответ. спасибо – Jessica