2015-01-27 2 views
1

У меня есть словарь по умолчанию с именем ДФ:Как получить ключевые значения из словаря по умолчанию в Python?

defaultdict(<type 'int'>, {u'DE': 1, u'WV': 1, u'HI': 1, u'WY': 1, u'NH': 2, u'NJ': 1, u'NM': 1, u'TX': 1, u'LA': 1, u'NC': 1, u'NE': 1, u'TN': 1, u'RI': 1, u'VA': 1, u'CO': 1, u'AK': 1, u'AR': 1, u'IL': 1, u'GA': 1, u'IA': 1, u'MA': 1, u'ID': 1, u'ME': 1, u'OK': 2, u'MN': 1, u'MI': 1, u'KS': 1, u'MT': 1, u'MS': 1, u'SC': 2, u'KY': 1, u'OR': 1, u'SD': 1}) 

как я получаю ключи этого словаря, значения которого больше 1.

Если я [df[val] for val in df if df[val]>1]

Я получаю выход as [2, 2, 2]

Если я печатаю [df.keys() for val in df if df[val]>1] Тем не менее, я не получаю ключевые значения, мне нужны ключи, значения которых больше 2, как это ['SC', 'OK', 'NH'] Как это сделать?

+0

'[val for val in df ...]'? Но было бы проще назвать это «ключом»; это то, что вы перебираете по умолчанию: '[ключ для ключа в df, если df [key]> 1]'. Альтернативно, '[ключ для ключа, val в df.items(), если val> 1]'. – jonrsharpe

+0

@jonrsharpe Если я вызываю .key, я получаю ошибку атрибута –

+0

Я никогда не предлагал '.key'. – jonrsharpe

ответ

2

Чтение из словаря, созданного с использованием defaultdict(), совпадает с нормальным dict.

Чтобы получить ключи, которые имеют значения> 1, вы могли бы сделать:

my_dict = defaultdict(...) 
print [key for key, value in my_dict.iteritems() if value > 1] 

Если вы используете Python 3, то это my_dict.items().

+0

[str (val) для val в df, если df [val]> 1], это намного проще. Я также нашел альтернативу дефолту по умолчанию. Счетчик (http://pymotw.com/2/collections/counter.html) и countStates.most_common() –

+1

Ну, если вы собираетесь идти по этому маршруту, он должен по крайней мере быть '[str (ключ) для ключа в df если df [key]> 1] ', учитывая, что это ключи, а не значения, которые вы повторяете. – dursk

0

Мы можем использовать метод сжатия списка.

>>> from collections import defaultdict 
>>> d = defaultdict(int) 
>>> d['HI'] = 1 
>>> d['NH'] = 2 
>>> d['WY'] = 1 
>>> d['OK'] = 2 
>>> [i[0] for i in d.items() if i[1]>1] 
['NH', 'OK'] 

 Смежные вопросы

  • Нет связанных вопросов^_^