파이썬에서 목록을 사전으로 변환
a
파이썬에 항목이 사전에 편리하게 매핑 되는 목록이 있다고 가정 해 봅시다 . 각 짝수 요소는 사전의 키를 나타내며 다음 홀수 요소는 값입니다.
예를 들어
a = ['hello','world','1','2']
그리고 그것을 사전으로 변환하고 싶습니다 b
.
b['hello'] = 'world'
b['1'] = '2'
이것을 달성하는 문법적으로 가장 깨끗한 방법은 무엇입니까?
b = dict(zip(a[::2], a[1::2]))
경우 a
큰, 당신은 아마 위와 같이 임시 목록을하지 않는 다음과 같은 일을 할 것입니다.
from itertools import izip
i = iter(a)
b = dict(izip(i, i))
파이썬 3에서는 dict comprehension을 사용할 수도 있지만 아이러니하게도 가장 간단한 방법은 range()
and 와 함께 len()
할 것이라고 생각합니다.이 코드는 일반적으로 코드 냄새입니다.
b = {a[i]: a[i+1] for i in range(0, len(a), 2)}
따라서 iter()/izip()
주석의 EOL 메모와 같이 Python 3에서는 zip()
이미 게으 르기 때문에이 방법은 여전히 Python 3에서 가장 Pythonic 일 것입니다 izip()
.
i = iter(a)
b = dict(zip(i, i))
한 줄로 원하면 세미콜론을 속이고 사용해야합니다. ;-)
간단한 답변
다른 옵션 (Alex Martelli https://stackoverflow.com/a/2597178/104264 제공 ) :
dict(x[i:i+2] for i in range(0, len(x), 2))
관련 메모
이것이 있다면 :
a = ['bi','double','duo','two']
그리고 당신은 이것을 원합니다 (목록 키의 각 요소는 주어진 값 (이 경우 2)) :
{'bi':2,'double':2,'duo':2,'two':2}
당신이 사용할 수있는:
>>> dict((k,2) for k in a)
{'double': 2, 'bi': 2, 'two': 2, 'duo': 2}
이를 위해 dict 이해력을 매우 쉽게 사용할 수 있습니다.
a = ['hello','world','1','2']
my_dict = {item : a[index+1] for index, item in enumerate(a) if index % 2 == 0}
이것은 아래의 for 루프와 같습니다.
my_dict = {}
for index, item in enumerate(a):
if index % 2 == 0:
my_dict[item] = a[index+1]
내가 꽤 멋진 것을 발견 한 것은 목록이 2 항목 밖에없는 경우입니다.
ls = ['a', 'b']
dict([ls])
>>> {'a':'b'}
dict은 iterable의 각 항목 자체가 정확히 두 개의 오브젝트가있는 iterable이어야하는 iterable을 포함하는 모든 iterable을 허용합니다.
가장 파이썬이 아닐 수도 있지만
>>> b = {}
>>> for i in range(0, len(a), 2):
b[a[i]] = a[i+1]
추가 배열을 만들지 않고도 꽤 빨리 할 수 있으므로 매우 큰 배열에서도 작동합니다.
dict(izip(*([iter(a)]*2)))
발전기가 있다면 a
더 좋습니다.
dict(izip(*([a]*2)))
요약은 다음과 같습니다.
iter(h) #create an iterator from the array, no copies here
[]*2 #creates an array with two copies of the same iterator, the trick
izip(*()) #consumes the two iterators creating a tuple
dict() #puts the tuples into key,value of the dictionary
다음과 같이 할 수도 있습니다 (문자열 변환을 나열한 다음 사전으로 변환)
string_list = """
Hello World
Goodbye Night
Great Day
Final Sunset
""".split()
string_list = dict(zip(string_list[::2],string_list[1::2]))
print string_list
또한 Perl에서 해시에 대한 기본 이니셜 라이저가되는 한이 변환에 대한 하나의 라이너를 갖는 것이 매우 흥미 롭습니다.
이 스레드에는 매우 포괄적 인 답변이 제공됩니다.
Python 2.7 Generator Expressions을 사용하여 파이썬 에서 초보자입니다 .
dict((a[i], a[i + 1]) for i in range(0, len(a) - 1, 2))
이것이 파이썬인지 확실하지 않지만 작동하는 것 같습니다.
def alternate_list(a):
return a[::2], a[1::2]
key_list,value_list = alternate_list(a)
b = dict(zip(key_list,value_list))
아래 코드를보십시오 :
>>> d2 = dict([('one',1), ('two', 2), ('three', 3)])
>>> d2
{'three': 3, 'two': 2, 'one': 1}
이 방법을 사용하여 키와 값을 다른 목록에 저장 한 다음 dict 방법을 사용할 수 있습니다
data=['test1', '1', 'test2', '2', 'test3', '3', 'test4', '4']
keys=[]
values=[]
for i,j in enumerate(data):
if i%2==0:
keys.append(j)
else:
values.append(j)
print(dict(zip(keys,values)))
산출:
{'test3': '3', 'test1': '1', 'test2': '2', 'test4': '4'}
{x: a[a.index(x)+1] for x in a if a.index(x) % 2 ==0}
result : {'hello': 'world', '1': '2'}
참고URL : https://stackoverflow.com/questions/4576115/convert-a-list-to-a-dictionary-in-python
'IT story' 카테고리의 다른 글
Windows의 /usr/local/ssl/openssl.cnf에서 구성 정보를로드 할 수 없습니다 (0) | 2020.05.24 |
---|---|
꼬리와 비슷한 파이썬으로 파일의 마지막 n 줄 가져 오기 (0) | 2020.05.24 |
C #의 "정적 방법"은 무엇입니까? (0) | 2020.05.24 |
업로드하기 전에 HTML5 사전 크기 조정 이미지 (0) | 2020.05.24 |
브라우저를 다시로드 할 때 Angular 2.0 라우터가 작동하지 않습니다 (0) | 2020.05.24 |