94516


以下がdict1という辞書に対して行いたい処理です。

dict1のkey[0]からアルファベット順に並べ、同じアルファベットの中でもkey[1]から数字が小さい順に並べて、さらにkey[2],key[3]でも同様に分類して出力させたいです。

知識不足ながらプログラム案を考えてみましたが、上手くできません。ご教示お願い致します。

**対象の辞書データ:**

[code]

    dict1 = {
        ('a', '1', 'a', '2'): ['A'],
        ('a', '1', 'a', '1'): ['B', 'C'],
        ('b', '1', 'a', '2'): ['D'],
        ('c', '1', 'a', '3'): ['E'],
        ('b', '1', 'b', '3'): ['F'],
        ('c', '1', 'd', '3'): ['G'],
        ('a', '2', 'd', '2'): ['H']
    }
    
[/code]

**期待する結果:**

[code]

    result =
    
    　　　a 1
      　　　a 1  B,C
      　　　a 2  A 
    　　　a 2
      　　　d 2  H
    　　　b 1
      　　　a 2  D
      　　　b 3  F
    　　　c 1
      　　　a 3  E
      　　　d 3  G 
    
[/code]

**現状のコードと出力結果:**

[code]

    for c,p in dict1.items():
      print(*c,*p)
    
    # 出力
    a 1 a 2 A
    a 1 a 1 B C
    b 1 a 2 D
    c 1 a 3 E
    b 1 b 3 F
    c 1 d 3 G
    a 2 d 2 H
    
[/code]


CC BY-SA 4.0
2023-04-14T03:01:54.533
94515
2023-04-14T04:42:59.047
2023-04-14T04:42:59.047
3060
57218
question
python
辞書を任意的に並び替えして出力させたい

[code]

    from itertools import groupby
    
    dict1 = {
        ('a', '1', 'a', '2'): ['A'],
        ('a', '1', 'a', '1'): ['B', 'C'],
        ('b', '1', 'a', '2'): ['D'],
        ('c', '1', 'a', '3'): ['E'],
        ('b', '1', 'b', '3'): ['F'],
        ('c', '1', 'd', '3'): ['G'],
        ('a', '2', 'd', '2'): ['H'],
    }
    
    keyf = lambda x: x[:2]
    for k, g in groupby(sorted(dict1, key=keyf), key=keyf):
        print(*k)
        for v in sorted(g, key=lambda x: x[2:]):
            print(' ', *v[2:], '', ','.join(dict1[v]))
    
    # a 1
    #   a 1  B,C
    #   a 2  A
    # a 2
    #   d 2  H
    # b 1
    #   a 2  D
    #   b 3  F
    # c 1
    #   a 3  E
    #   d 3  G
    
[/code]


CC BY-SA 4.0
2023-04-14T03:43:53.133
94516
2023-04-14T03:57:06.880
2023-04-14T03:57:06.880
47127
47127
94515
answer