python 2 차원 사전 의 키 값 통합 등 함수 구현

이 글 은 주로 python 에서 사전 에 관 한 구체 적 인 조작 을 말한다.설명 하 는 문 제 는 모두 본인 이 실제 프로 그래 밍 에서 만난 문제 이 고 독 자 는 자신 이 직면 한 문제 에 따라 구체 적 으로 분석 할 수 있다.
(1)2 차원 사전 의 키 값 통합:
먼저 응용 장면 을 제공 합 니 다:
내 가 2 차원 사전 이 있다 고 가정 하면:

room1 = {orderid1:{roomid1:pred1,roomid2:pred2},orderid2:{roomid3:pred3,roomid4:pred4}}
room2 = {orderid1:{roomid1:pred5,roomid2:pred6},orderid2:{roomid3:pred7,roomid4:pred8}}
이 두 사전 의 key 는 같 습 니 다.2 차원 의 value 만 다 릅 니 다.제 목적 은 이 두 사전 의 value 를 더 해서 얻 은 결 과 는 다음 과 같 습 니 다.

sum_room = {orderid1:{roomid1:pred1+pred5,roomid2:pred2+pred6},orderid2:{roomid3:pred3+pred7,roomid4:pred4+pred8}}
구체 적 인 실현 코드 는 다음 과 같다.(유 니 버 설 성 을 높이 기 위해 다음 코드 는 두 개의 간단 한 사전 obj 3,obj 4 를 만 들 었 다)
2 차원 사전 의 키 값 통합 을 실현 합 니 다.같은 key 아래 의 value 를 추가 할 것 입 니 다:
사고방식:먼저 빈 사전 all 만 들 기room,allroom 과 obj 의 value 를 더 해서 allroom:

from collections import defaultdict
all_room = defaultdict(defaultdict)
obj3 = {'a':{'aa':1,'aa1':2},'b':{'bb':2},'c':3}
obj4 = {'a': {'aa': 5, 'aa1': 6}, 'b': {'bb': 7}, 'c': 8}
def sum_value(obj):
 for key in obj:
  if type(obj[key]).__name__ == 'dict':
   if key not in all_room:
    all_room[key] = {}
   for subkey in obj[key]:
    if subkey not in all_room[key]:
     all_room[key][subkey] = 0
    all_room[key][subkey] += obj[key][subkey] 
  else:
   if key not in all_room:
    all_room[key] = 0
   all_room[key] += obj[key]
 return all_room
결 과 를 살 펴 보 자.

sum_value(obj3)
Out[40]: 
defaultdict(collections.defaultdict,
   {'a': {'aa': 1, 'aa1': 2}, 'b': {'bb': 2}, 'c': 3})
 
sum_value(obj4)
Out[41]: 
defaultdict(collections.defaultdict,
   {'a': {'aa': 6, 'aa1': 8}, 'b': {'bb': 9}, 'c': 11})
글 의 첫머리 에 서술 한 기능 을 실현 하 였 다.
sum_value(obj)이 함 수 는 여러 개의 2 차원 사전 에 대한 키 값 을 추가 할 수 있 습 니 다.for 순환 만 만 만 들 면 됩 니 다.
(2)사전 키 에 새 value 추가 하기:
같은 응용 장면 을 제공 합 니 다:

dict1 = {'order1': ['room1', 'room1'],'order2': ['room3', 'room3']}
 
dict2 = {'order1': 'room2', 'order2': 'room3'}
제 목적 은 dict 2 의 key 에 있 는 value 를 dict 1 의 같은 key 에 추가 하 는 것 입 니 다.이상 적 인 결 과 는 다음 과 같 습 니 다.

dict1 = {'order1': ['room1', 'room1', 'room2'], 'order2': ['room3', 'room3', 'room3']}
다음 구현 코드 를 드 립 니 다:

for key in dict1.keys():
 a=[]
 b=[]
 b = dict1[key] 
 for i in b: ##      ,    dict1[key] value       a,  dict2[key] value   a  ,      dict1[key]    list 
  a.append(i)
 a.append(dict2[key]) ##dict2[key]          
 dict1[key] = a
결 과 는 다음 과 같다.

dict1
Out[88]: {'order1': ['room1', 'room1', 'room2'], 'order2': ['room3', 'room3', 'room3']}
다음 단계 에서 key 의 value 개 수 를 통계 합 니 다.

from collections import Counter
for key,item in dict1.items():
 count[key] = Counter(item)
결 과 는 다음 과 같다.

count

Out[91]: {'order1': Counter({'room1': 2, 'room2': 1}), 'order2': Counter({'room3': 3})}
이 어 각 바깥쪽 key 에서 안쪽 value 가 가장 큰 key 를 꺼 냅 니 다.
(예 를 들 어 order 1 에서 room 1 의 값 은 2 로 최대 값 입 니 다.그래서 저 는 room 1 을 order 1,즉 result 1={'order 1':'room 1'}에 부 쳤 습 니 다.)

result = {}
for key,item in count.items():
 result[key] = max(item,key=item.get)
결 과 는 다음 과 같다.

result
Out[94]: {'order1': 'room1', 'order2': 'room3'}
(3)사전 정렬:sorted()함수

import operator
dic = {(1, 2): 3, (1, 3): 4, (4, 5): 14} ##   key     ;
ds = sorted(dic.items(),key=operator.itemgetter(1),reverse=True) ##       , reverse=True    ;
ds
Out[21]: [((4, 5), 14), ((1, 3), 4), ((1, 2), 3)]
(4)사전 에 서 는 한 키 가 여러 값 에 대응 하 는 경우 가 허용 되 지 않 습 니 다.이 경우 마지막 키 값 을 가 져 옵 니 다.
예:

>>> dict1 = {'foo':789, 'foo': 'xyz'} 

>>> dict1   :{'foo': 'xyz'}
이상 의 python 은 2 차원 사전 의 키 값 통합 등 함 수 를 실현 하 는 것 이 바로 작은 편집 이 여러분 에 게 공유 하 는 모든 내용 입 니 다.여러분 께 참고 가 되 고 저희 도 많이 응원 해 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기