#python #dictionary
#python #словарь
Вопрос:
просматривайте словарь, выбирая из него ключи в цикле?
Например, допустим, у меня есть следующий словарь: {'hello':'world', 'hi':'there'}
. Есть ли способ for
перебрать словарь и распечатать hello, hi
?
на аналогичной ноте есть ли способ сказать myDictionary.key[1]
, и это вернется hi
?
Комментарии:
1. Возможно, вы захотите взглянуть на это: docs.python.org/library/stdtypes.html#mapping-types-dict
Ответ №1:
Вы можете перебирать ключи dict с помощью цикла for:
>>> for key in yourdict:
>>> print(key)
hi
hello
Если вы хотите, чтобы они были разделены запятыми, вы можете использовать ', '.join
.
>>> print(', '.join(yourdict))
hi, hello
на аналогичной ноте есть ли способ сказать MyDictionary.key 1, и это вернет привет
Нет. Ключи в словаре не расположены в каком-либо определенном порядке. Порядок, который вы видите, когда перебираете их, может отличаться от порядка, в котором вы вставили их в словарь, а также порядок теоретически может меняться при добавлении или удалении элементов.
если вам нужна упорядоченная коллекция, вы можете рассмотреть возможность использования другого типа, такого как a list
или an OrderedDict
Комментарии:
1. как вы говорите, MyDictionary.key(1)? что такое вызов метода?
2. MyDictionary.keys()[1] сделает это, но, как отметил Марк, вы не можете полагаться на порядок
Ответ №2:
Вы можете использовать .keys()
метод:
for key in myDictionary.keys():
print(key)
Вы также можете использовать .items()
для перебора обоих одновременно:
for key, value in myDictionary.items():
print(key, value)
Ответ №3:
Использование имени словаря в качестве последовательности создает все ключи:
>>> d={'hello':'world', 'hi':'there'}
>>> list(d)
['hi', 'hello']
таким list({'hello':'world', 'hi':'there'})[1]
образом, создается элемент 1 списка ключей.
Однако это имеет ограниченное применение, поскольку словари неупорядочены. И их порядок может отличаться от порядка вставки:
>>> d={'a': 'ahh', 'b': 'baa', 'c': 'coconut'}
>>> d
{'a': 'ahh', 'c': 'coconut', 'b': 'baa'}
Вы можете сделать sorted(list({'hello':'world', 'hi':'there'}))[1]
для 1 элемента отсортированного списка ключей вашего dict. В этом случае получается ‘hi’. Не самый читаемый или эффективный…
Вы должны посмотреть на OrderedDict, если хотите отсортировать порядок.
Или просто отсортируйте по списку:
>>> d={'a': 'ahh', 'b': 'baa', 'c': 'coconut'}
>>> l=[(k,v) for k, v in d.items()]
>>> l.sort()
>>> l[1]
('b', 'baa')
>>> l[1][0]
'b'
Вы можете вернуться (k,v)
к (v,k)
, если хотите сортировать по значению, а не по ключу.
Ответ №4:
dict.iterkeys
в Python 2, dict.keys
в Python 3.
d = { 'hello': 'world', 'hi': 'there' }
for key in d.iterkeys():
print key
Ответ №5:
Похоже, список ключей будет соответствовать вашим потребностям:
>>> d = { 'hello': 'world', 'hi': 'there' }
>>> keys = list(d)
>>> keys
['hi', 'hello']
>>> from random import choice
>>> choice(keys)
'hi'