목록의 각 사전에 요소 추가(목록 이해)
사전 목록이 있는데 이 목록의 각 요소에 대한 키를 추가하려고 합니다.노력했습니다.
result = [ item.update({"elem":"value"}) for item in mylist ]
그러나 업데이트 방법이 없음을 반환하여 결과 목록이 없음으로 가득 찼습니다.
result = [ item["elem"]="value" for item in mylist ]
구문 오류를 반환합니다.
목록 이해력을 사용하고 싶다면 여기에 훌륭한 답이 있습니다: https://stackoverflow.com/a/3197365/4403872
이 경우 다음과 같습니다.
result = [dict(item, **{'elem':'value'}) for item in myList]
예:
myList = [{'a': 'A'}, {'b': 'B'}, {'c': 'C', 'cc': 'CC'}]
그러면 다음 중 하나를 사용합니다.
result = [dict(item, **{'elem':'value'}) for item in myList]
또는
result = [dict(item, elem='value') for item in myList]
마침내.
>>> result
[{'a': 'A', 'elem': 'value'},
{'b': 'B', 'elem': 'value'},
{'c': 'C', 'cc': 'CC', 'elem': 'value'}]
업데이트된 사전에 대한 참조는 이전 사전에 대한 참조와 동일하므로 새 사전 목록을 구성할 필요가 없습니다.
for item in mylist:
item.update( {"elem":"value"})
@vk1011의 답변은 좋고 스프레드 연산자로 간결하게 확장할 수 있으며 새로운 사전 객체는 추가적인 이점입니다.
기존 키의 값을 새 키로 재정의하려면 새 항목 앞에 스프레드 연산자를 배치할 수 있습니다.
result = [{**item, 'elem':'value'} for item in myList]
새 항목의 값을 기존 항목으로 재정의하려면 새 항목 다음에 스프레드 연산자를 사용
result = [{'elem':'value', **item} for item in myList]
두 방법 모두 새 항목을 포함한 사전 개체 목록을 제공합니다.
전통적이지만 다른(세련된) 답변보다 빠릅니다.
myList = [{'a': 'A'}, {'b': 'B'}, {'c': 'C', 'cc': 'CC'}]
for item in myList: item['elem']='value'
일부 시간:
%timeit result = [dict(item, **{'elem':'value'}) for item in myList]
865 ns ± 8.89 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
%timeit result = [dict(item, elem='value') for item in myList]
854 ns ± 5.37 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
%timeit result = list(map(lambda item: dict(item, elem='value'), myList))
1.22 µs ± 86.2 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
%timeit for item in myList: item.update({'elem':'value'})
464 ns ± 3.72 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
%timeit for item in myList: item['elem']='value'
124 ns ± 0.31 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
%timeit [dict(list(item.items()) + [("elem", "value")]) for item in myList]
1.59 µs ± 14.8 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
지도를 사용할 수 있습니다.
result = map(lambda item: dict(item, elem='value'), myList)
요소 리스트가 이미 있는 경우 다음 작업을 수행할 수 있습니다.
#elements = ['value'] * len(myList)
result = map(lambda item: dict(item[0], elem=item[1]),zip(myList,elements))
그러면 당신은 결과를 얻게 됩니다.
>>> a = [ { 1:1 }, {2:2}, {3:3} ]
>>> for item in a:
... item.update( { "test": "test" } )
...
>>> a
[{'test': 'test', 1: 1}, {'test': 'test', 2: 2}, {'test': 'test', 3: 3}]
목록 이해력을 잘못 사용하고 있습니다. 통화 내용은 다음과 같습니다.item.update
를 반환합니다.None
값을 지정하면 새로 작성된 목록은 다음으로 가득 찰 것입니다.None
예상치 대신 값dict
가치.
목록에는 목록에 대한 참조가 포함되어 있기 때문에 목록의 항목을 루프하고 그에 따라 각각을 업데이트하면 됩니다.dict
가치.
목록 이해를 사용하지 않거나 원본 딕트와 새 키를 기반으로 새 딕트를 반환합니다.
[dict(list(item.items()) + [("elem", "value")]) for item in mylist]
언급URL : https://stackoverflow.com/questions/14071038/add-an-element-in-each-dictionary-of-a-list-list-comprehension
'source' 카테고리의 다른 글
ASP에서 작업의 전체 URL을 가져오는 중입니다.NET MVC (0) | 2023.05.07 |
---|---|
Xcode에서 코드 들여쓰기 수정 (0) | 2023.05.02 |
두 범위 함수 결과 연결 (0) | 2023.05.02 |
Bash의 멀티스레딩 (0) | 2023.05.02 |
MongoDB에서 날짜를 저장하는 가장 좋은 방법은 무엇입니까? (0) | 2023.05.02 |