파이썬 사전에 대한 enumerate ()


82

enumerate목록을 반복하는 데 사용 하는 것을 알고 있지만 사전에서 시도했지만 오류가 발생하지 않았습니다.

암호:

enumm = {0: 1, 1: 2, 2: 3, 4: 4, 5: 5, 6: 6, 7: 7}

for i, j in enumerate(enumm):
    print(i, j)

산출:

0 0

1 1

2 2

3 4

4 5

5 6

6 7

누군가 출력을 설명 할 수 있습니까?


2
for i, j in enumerate(enumm) 얻을 i때마다 반복에서 증가하고 j으로부터 일반적인 항목을 잡는다 enumerate이 경우 사전 인 함수 인수. dicts를 반복하는 것은 본질적으로 키를 반복하는 것입니다.
Divyanshu Srivastava

답변:


111

이미 제공된 답변 외에도 사전의 키와 값을 모두 열거 할 수있는 Python의 매우 멋진 패턴이 있습니다.

사전 의 키열거하는 일반적인 경우 :

example_dict = {1:'a', 2:'b', 3:'c', 4:'d'}

for i, k in enumerate(example_dict):
    print(i, k)

출력되는 내용 :

0 1
1 2
2 3
3 4

그러나 키와 값을 모두 열거 하려면 다음 같이하십시오.

for i, (k, v) in enumerate(example_dict.items()):
    print(i, k, v)

출력되는 내용 :

0 1 a
1 2 b
2 3 c
3 4 d

1
(+1) dictionary.items()튜플 목록으로 키-값 쌍이있는 뷰 객체를 얻기 위해 (열거없이) 간단히 사용할 수도 있습니다 .
Tiago Martins Peres 李大仁

62

출력의 첫 번째 열은 각 항목의 색인이고 두 번째 열은 enumm키입니다. 사전을 반복하려면 .items ()를 사용하십시오.

for k, v in enumm.items():
    print(k, v)

출력은 다음과 같아야합니다.

0 1
1 2
2 3
4 4 
5 5
6 6
7 7

32

추가 할 것이라고 생각했습니다. 사전의 인덱스, 키 및 값을 열거하려면 for 루프가 다음과 같아야합니다.

for index, (key, value) in enumerate(your_dict.items()):
    print(index, key, value)

3
이 질문은 구문에 대한 문제와 관련,이 대답은 두 개의 추가 괄호의 짧은 솔루션을 제공한다 :idx, (k, v) in enumerate(d.items()):
숀 Pianka

안녕 Sean, 대답에 동의하는지 또는 단순히 더 짧은 변수 이름이 더 나은 대답을 만든다고 말하는지 잘 모르겠습니다.
Jordan Mackie

25
dict1={'a':1, 'b':'banana'}

Python 2.x에서 사전을 나열하려면 :

for k,v in dict1.iteritems():
        print k,v 

Python 3.x에서는 다음을 사용합니다.

for k,v in dict1.items():
        print(k,v)
# a 1
# b banana

마지막으로, 다른 사람들이 지적했듯이, 실행중인 인덱스를 원한다면 그것도 가질 수 있습니다.

for i  in enumerate(dict1.items()):
   print(i)  

 # (0, ('a', 1))
 # (1, ('b', 'banana'))

그러나 이것은 전화 번호부 스타일 조회를위한 효율적인 데이터 구조 인 사전 (지도, 연관 배열) 의 목적을 무효화합니다 . 사전 순서는 구현에 부수적 일 수 있으므로 신뢰할 수 없습니다. 주문이 필요한 경우 OrderedDict를 대신 사용하세요.


2
이 게시물에서 2 자 편집을 할 수는 없지만 OP는 이것을 Python 3 용으로 태그 지정 했으므로 print 문에는 k, v 주위에 괄호가 있어야합니다.
wp-overwatch.com

@씨. 나, 타이, 고칠 것입니다.
roadrunner66

19
이것은 python2에서만 사용할 수 있습니다. dict.iteritems ()가 python3 제거하고, 또한 참조 stackoverflow.com/questions/30418481/...
gyger

1
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lkahtz

Ty. python3 대 python2를 업데이트했습니다. 열거에 대한 주석을 추가했습니다.
roadrunner66

5

enumerate따라서 사용하고 있기 때문에 i실제로 키 자체가 아니라 키의 색인입니다.

따라서 키가 없더라도 3행의 첫 번째 열에 들어 갑니다.3 43

enumerate 현재 반복 번호를 제공하는 동시에 데이터 구조 (목록 또는 사전)를 반복합니다.

따라서 여기의 열은 반복 번호와 사전의 키입니다. enum

다른 솔루션은 이미 키와 값 쌍을 반복하는 방법을 보여 주었으므로 동일한 방법을 반복하지 않을 것입니다.


4

enumerate()목록에서 작업 할 때 실제로 목록에있는 항목의 색인과 값을 제공합니다. 예를 들면 :

l = [1, 2, 3, 4, 5, 6, 7, 8, 9]
for i, j in enumerate(list):
    print(i, j)

준다

0 1
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9

여기서 첫 번째 열은 항목의 인덱스를 나타내고 두 번째 열은 항목 자체를 나타냅니다.

사전에서

enumm = {0: 1, 1: 2, 2: 3, 4: 4, 5: 5, 6: 6, 7: 7}
for i, j in enumerate(enumm):
    print(i, j)

그것은 출력을 제공합니다

0 0
1 1
2 2
3 4
4 5
5 6
6 7

여기서 첫 번째 열은 key:value쌍 의 색인을 제공 하고 두 번째 열은 keys사전을 나타냅니다 enumm.

따라서 첫 번째 열이 keys이고 두 번째 열이되게하려면 (Python 2) 또는 (Python 3)을 values시도하는 것이 좋습니다.dict.iteritems()dict.items()

for i, j in enumm.items():
    print(i, j)

산출

0 1
1 2
2 3
4 4
5 5
6 6
7 7

짜잔


1
이것은 사전에 해당되지 않습니다. 코드는 인덱스 (반복 용)를 사용하여 사전을 반복하지만 사전의 키-값 조합을 제공하지 않습니다. 대신 dict.items ()를 사용하십시오.
Matthias

예, dict.items ()로 진행할 수도 있습니다. 수정 해 주셔서 감사합니다.
Abhishek Roy

3

확실히 혼란스러워 보일 것입니다. 그래서 이것이 진행되고 있습니다. enumerate의 첫 번째 값 (이 경우 i)은 0에서 시작하는 다음 인덱스 값을 반환하므로 0, 1, 2, 3, ... 사전에있는 내용에 관계없이 항상 이러한 숫자를 반환합니다. enumerate의 두 번째 값 (이 경우 j)은 딕셔너리 / 열거 형 (파이썬에서는 딕셔너리라고 부릅니다)의 값을 반환합니다. 당신이 정말로하고 싶은 것은 roadrunner66이 응답 한 것입니다.


3
  1. Python dict를 반복한다는 것은 다음과 같은 방식으로 키를 반복하는 것을 의미합니다. dict.keys()
  2. 키의 순서는 구현 코드에 의해 결정되며 특정 순서를 기대할 수 없습니다.

    키와 값은 무작위가 아닌 임의의 순서로 반복되고 Python 구현에 따라 다르며 사전의 삽입 및 삭제 기록에 따라 다릅니다. 키, 값 및 항목보기가 사전에 개입하지 않고 반복되는 경우 항목의 순서가 직접 일치합니다.

그래서 첫 번째 열에 0에서 7까지의 인덱스가 표시됩니다. 그들은에 의해 생성되며 enumerate항상 올바른 순서로되어 있습니다. 또한 두 번째 열에서 dict의 키 0-7을 볼 수 있습니다. 정렬되지 않았습니다.


3

Python3 :

하나의 솔루션 :

enumm = {0: 1, 1: 2, 2: 3, 4: 4, 5: 5, 6: 6, 7: 7}
for i, k in enumerate(enumm):
    print("{}) d.key={}, d.value={}".format(i, k, enumm[k]))

Output:
0) enumm.key=0, enumm.value=1
1) enumm.key=1, enumm.value=2
2) enumm.key=2, enumm.value=3
3) enumm.key=4, enumm.value=4
4) enumm.key=5, enumm.value=5
5) enumm.key=6, enumm.value=6
6) enumm.key=7, enumm.value=7

또 다른 예 :

d = {1 : {'a': 1, 'b' : 2, 'c' : 3},
     2 : {'a': 10, 'b' : 20, 'c' : 30}
    }    
for i, k in enumerate(d):
        print("{}) key={}, value={}".format(i, k, d[k])

Output:    
    0) key=1, value={'a': 1, 'b': 2, 'c': 3}
    1) key=2, value={'a': 10, 'b': 20, 'c': 30}

1
d = {0: 'zero', '0': 'ZERO', 1: 'one', '1': 'ONE'}

print("List of enumerated d= ", list(enumerate(d.items())))

산출:

List of enumerated d=  [(0, (0, 'zero')), (1, ('0', 'ZERO')), (2, (1, 'one')), (3, ('1', 'ONE'))]

0

키 안에 색인을 포함하는 것이 유용 할 수 있습니다.

d = {'a': 1, 'b': 2}
d = {(i, k): v for i, (k, v) in enumerate(d.items())}

산출:

{(0, 'a'): True, (1, 'b'): False}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.