2012-02-11 4 views
1

Я знаю, что можно использовать словарь, используя iteritems() или keys(). Но что, если я получил список таких типов, как: l = [{'a': 1}, {'b': 2}, {'c': 3}], и я хочу написать строку, используя ее ключи, например, s = 'a, b, c'?Как получить ключ в словаре Python

Одним из решений является скопировать все ключи в список заранее и составить нужную строку. Просто интересно, есть ли лучшее решение.

+0

@GregS: Это не тот вопрос, о котором идет речь. –

+0

@GregS Это список словарей, а не словарь содержит несколько элементов. – clwen

+0

@NiklasB. Как вы можете быть так уверены? В описании указан список диктов, но пример - это один dict. –

ответ

8

Для этого вы можете использовать itertools.chain() и использовать тот факт, что итерация над диктором дадут свои ключи.

import itertools 
lst = [{'a': 1}, {'b': 2}, {'c': 3}] 
print ', '.join(itertools.chain(*lst)) 

Это также работает, там есть dicts с более чем одним элементом.

Если вы не хотите, повторяющиеся элементы, используйте набор:

print ', '.join(set(itertools.chain(*lst))) 
+1

+1, действительно чистый. –

1

Предположим, что каждый словарь будет иметь только один ключ:

', '.join(a.keys()[0] for a in l) 

если нет, то может быть что-то вроде:

>>> l = [{'a': 1, 'd': 4}, {'b': 2}, {'c': 3}] 
>>> ', '.join(', '.join(a.keys()) for a in l) 
'a, d, b, c' 
0

перебрать словарей, а затем по клавишам каждого словаря:

>>> lst = [{'a': 1}, {'b': 2}, {'c': 3}] 
>>> ', '.join(key for dct in lst for key in dct.keys()) 
'a, b, c' 
0

Попробуйте это:

''.join([i.keys()[0] for i in l]) 

Вы можете поместить любой разделитель вы хотите внутри кавычек. Просто имейте в виду, что словарь не упорядочен, поэтому вы можете получить странные выглядящие строки в результате этого.

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