2016-11-04 2 views
0

Я запускаю python 2.7 в PS на w10. Я хочу напечатать ключ и значение словаря с каждой проверенной парью.Форматирование записей в словаре

я сделать следующее:

my_dict = {'key_one': 1, 'key_two': 2, 'key_three': 3} 

for k, v in enumerate(my_dict.iteritems(), start = 1): 
    print k, v 

, который в свою очередь дает: 1 ('key_one', 1) 2 ('key_two', 2) 3 ('key_three', 3)

Как вернуть записи без скобок?

Пример. Я хочу поставить знак = между моими парами ключ-значение.

ответ

3

Если вы хотите сохранить indicies (от Перечислим), то вы будете иметь, чтобы распаковать ключ и значение из элементов Dict отделяющее. Прямо сейчас то, что вы вызываете k, на самом деле является индексом, а то, что вы вызываете v, фактически является парой ключ-значение. Попробуйте что-то вроде этого:

for i, (k, v) in enumerate(my_dict.iteritems(), start=1): 
    print i, k, v 

Это приводит к чему-то вроде:

1 key_two 2 
2 key_one 1 
3 key_three 3 

Чтобы получить их отформатирован знаком равенства, вы должны изменить оператор печати на print i, "{}={}".format(k, v), что приведет к что-то вроде:

1 key_two=2 
2 key_one=1 
3 key_three=3 

Если вам нужно получить ключи в последовательном порядке, используйте sorted(), например:

for i, (k, v) in enumerate(sorted(my_dict.iteritems()), start=1): 
    ... 

Или, если вы хотите отсортировать по значениям первого вместо ключей первым, вы можете задать key функцию для sorted() вызова. Это будет выглядеть так: sorted(my_dict.iteritems(), key=lambda (x, y): (y, x)). Это даст вам выход

1 key_one=1 
2 key_two=2 
3 key_three=3 
+0

Да, за исключением того, что стоит отметить, что словарь неупорядочен, поэтому перечисление имеет очень ограниченное значение – brianpck

+0

С учетом сказанного, если я запустил этот скрипт на другой машине, перечисление будет отличаться от моего? Я заметил, что порядок, в котором пары вводятся в изменениях, если я вызываю iteritems() на dict ... – beetroot

+0

@beetroot Да. Это по дизайну. Python не гарантирует, что элементы в dict будут извлекаться в любом конкретном порядке (это связано с тем, что словари обычно реализуются на низком уровне). Если вы хотите получить последовательный заказ, вы можете отсортировать элементы. См. Мое редактирование ответа, чтобы узнать, как это сделать. – user3030010

0

Это работает

my_dict = {'key_one': 1, 'key_two': 2, 'key_three': 3} 
for key,value in my_dict.iteritems(): 
    print key,value 
1

Вам не нужно enumerate, если вы просто хотите, чтобы напечатать существующий ключ и значение в словаре. Просто используйте format():

for k, v in my_dict.items(): 
    print '{} = {}'.format(k, v) 

Это дало бы:

key_one = 1 
key_two = 2 
key_three = 3 
0

как это?

>>> for k, v in my_dict.iteritems(): 
...  print k, v 
... 
key_two 2 
key_one 1 
key_three 3 

или

>>> for i, (k, v) in enumerate(my_dict.iteritems(), start=1): 
...  print i, k, v 
... 
1 key_two 2 
2 key_one 1 
3 key_three 3 
0

Вам не нужно enumerate() здесь. Он используется, когда вам нужно итерации вместе с индексом . вам даже не нужно str.format() для этого. Просто разместите запись строки '=' между key, value, и вы получите то, что пожелаете.Например:

>>> my_dict = {'key_one': 1, 'key_two': 2, 'key_three': 3} 
>>> for key, value in my_dict.items(): 
...  print key, '=', value 
... 
key_two = 2 
key_one = 1 
key_three = 3 

Edit: На основе комментариев в user3030010's answer

Примечание: dict в питоне есть ип прописал. Если вы хотите сохранить заказ, вместо этого используйте collections.OrderedDict(). Он сохранит порядок, не зависящий от платформы и версии python. Например, если вы создали dict как:

>>> from collections import OrderedDict 
>>> my_dict = OrderedDict() 
>>> my_dict['key_one'] = 1 
>>> my_dict['key_two'] = 2 
>>> my_dict['key_three'] = 3 

На переборе, вы всегда получите тот же ответ, как:

>>> for key, value in my_dict.items(): 
...  print key, '=', value 
... 
key_one = 1 
key_two = 2 
key_three = 3 
0

Простой однострочного решение (для Python 2.7):

print '\n'.join([k+'='+ str(my_dict[k]) for k in my_dict.keys()]) 

выход:

key_two=2                                                            
key_one=1                                                            
key_three=3 
Смежные вопросы