2017-01-10 5 views
0

У меня есть словарь, такие как:Pythonic способ перебора словаря, чтобы преобразовать его элементы в строку

a = { "Linux": "Linus Torvalds", 
     "Microsoft": "Bill Gates", 
     "Apple": "Steve Jobs"} 

Я хочу stringify этот словарь, чтобы что-то вроде этого:

Linux : Linus Torvalds 
Microsoft: Bill Gates 
Apple : Steve Jobs 

Для делать это операция, у меня есть следующий код:

data = "" 
for product, lead in a.items(): 
    data += product + ": " + lead + "\n" 

Этот код дает следующий результат:

print(data) 
Linux: Linus Torvalds 
Microsoft: Bill Gates 
Apple: Steve Jobs 

Я хотел бы получить более Pythonic способ выполнить эту операцию, поскольку, по-моему, мой код является скорее процедурным методом для решения этой проблемы (инициализация и манипулирование). Кроме того, любые советы по правильному форматированию data не будут ошибочными.

+1

Почему вы хотите сделать строки здесь, для визуализации? Я не могу представить себе случай, когда это хорошая идея. –

+0

@Chris_Rands Да. Я хочу распечатать данные. –

+0

Просто повторите попытку: 'для k, v в a.items(): print (k, v)' или вы можете использовать 'pprint', но это, вероятно, слишком велико. –

ответ

4

Если вы хотите, чтобы получить их отформатирован, как у вас есть

print('\n'.join(['{:<9}: {}'.format(k, v) for k, v in a.items()])) 

отпечатки

Apple : Steve Jobs 
Linux : Linus Torvalds 
Microsoft: Bill Gates 
+2

, вы также можете использовать звездный формат: '.format (* pair) для пары в a.items()'. Мне нравится этот подход немного лучше для контроля над форматом линии, который он позволяет. –

+0

Спасибо за ваше решение и @ Kounis за предложение. –

+0

@ Ev.Kounis явно лучше, чем неявный. Это помогает документировать то, что в этом случае. –

3

Вы можете использовать вложенную операцию str.join.

print('\n'.join(': '.join(item) for item in a.items())) 
# Linux: Linus Torvalds 
# Microsoft: Bill Gates 
# Apple: Steve Jobs 

Это создает генератор, содержащий ключи и значения, разделенные ': ', а затем присоединиться к ним вместе с «\n».

+0

Спасибо за ваше решение –

1

Первый преобразующие dict к итератора с map, а затем присоединиться элементы с помощью join:

work_person = map(lambda x: x[0]+': '+x[1], a.items())  
res = '\n'.join(work_person) 
1

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

max_length = max(len(k) for k in a) 
print('\n'.join(['{:<{}}: {}'.format(k, max_length, v) for k, v in a.items()])) 
Смежные вопросы