2017-11-24 4 views
1

도와주세요. 나는이 같은 데이터 집합을 가지고파이썬에서 사전 목록 사전의 데이터를 정렬하는 방법?

my_dict = { 'project_1' : [{'commit_number':'14','name':'john'}, 
          {'commit_number':'10','name':'steve'}], 
      'project_2' : [{'commit_number':'12','name':'jack'}, 
          {'commit_number':'15','name':'anna'}, 
          {'commit_number':'11','name':'andy'}] 
      } 

내가 내림차순의 커밋 수를 기준으로 데이터 집합을 정렬하고 파이썬을 사용하여 프로젝트의 이름을 무시하여 새리스트에 확인해야합니다. 예상되는 목록은 다음과 같습니다.

ordered_list_of_dict = [{'commit_number':'15','name':'anna'}, 
         {'commit_number':'14','name':'john'}, 
         {'commit_number':'12','name':'jack'}, 
         {'commit_number':'11','name':'andy'}, 
         {'commit_number':'10','name':'steve'}] 

나를 도와 주셔서 대단히 감사합니다. 리스트 목록으로

답변

3
  1. 추출 my_dict의 값
  2. 함께 각각의 서브리스트에 가입 commit_number

의해

  • 정렬을 평면에서 각 소자를 형성하는 (dict_values 평탄화) * * python2의리스트. python3에서 dict_values 개체가 반환됩니다. python2에
    from itertools import chain 
    
    sorted(
        chain.from_iterable(my_dict.values()), key=lambda x: x['commit_number'], reverse=True 
    ) 
    
    [{'commit_number': '15', 'name': 'anna'}, 
    {'commit_number': '14', 'name': 'john'}, 
    {'commit_number': '12', 'name': 'jack'}, 
    {'commit_number': '11', 'name': 'andy'}, 
    {'commit_number': '10', 'name': 'steve'}] 
    


    , 동일한 효과 dict.itervalues 대신 dict.values 사용하십시오.

  • 1

    Coldspeed의 대답은 평소와 같이 그러나 대안으로 중대하다, 다음을 사용할 수 있습니다, 인쇄 할 때, 제공

    ordered_list_of_dict = sorted([x for y in my_dict.values() for x in y], key=lambda x: x['commit_number'], reverse=True) 
    

    :

    print(ordered_list_of_dict) 
    # [{'commit_number': '15', 'name': 'anna'}, {'commit_number': '14', 'name': 'john'}, {'commit_number': '12', 'name': 'jack'}, {'commit_number': '11', 'name': 'andy'}, {'commit_number': '10', 'name': 'steve'}] 
    

    참고 그 list-comprehension 당신은이에 리스트 목록을 평탄하게하기위한 표준 구조 :

    [x for sublist in big_list for x in sublist]

    0

    덜 불쾌하고 독자에게 친숙한 대답을 제공해 드리겠습니다.

    먼저 my_dict에서 키 - 값 쌍을 반복하고 값의 각 요소를 빈 목록에 추가하십시오. 이것은 기반으로 정렬됩니다

    sorted(commits, reverse = True) 
    

    : 다음

    In [121]: commits 
    Out[121]: 
    [{'commit_number': '12', 'name': 'jack'}, 
    {'commit_number': '15', 'name': 'anna'}, 
    {'commit_number': '11', 'name': 'andy'}, 
    {'commit_number': '14', 'name': 'john'}, 
    {'commit_number': '10', 'name': 'steve'}] 
    

    내림차순으로 정렬이주는

    commits = [] 
    for key, val in my_dict.items(): 
        for commit in val: 
         commits.append(commit) 
    

    : 당신이 피하기이 방법은리스트의 목록을 평평하게하는 'commit_number'는 'name'앞에 알파벳순으로 오기 때문에 지정하지 않아도됩니다. defensive coding을 지정하려는 경우이 정보는 최대한 빨리 가장 깨끗하게 정리할 수 있습니다.

    from operator import itemgetter 
    sorted(commits, key = itemgetter('commit_number'), reverse = True)