93953


値の左から順に同じグループになります。例えば、group1では、group１のaの1が一つのグループで、また別に、group１のaの2のグループ、group１のbの1のグループ、group１のaの1のグループとなり、4つのグループが存在することになります。

[code]

    dict1 = {"group1":["a","a","b","a"],"group2":["a","a","a","a","a"]}
    dict2 = {"group1":["1","2","1","1"],"group2":["1","1","2","3","4"]}
    
[/code]

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

  1. それぞれのgroupの中で値を照合
  2. 違う種類がどれくらいあるか判別（group１の中では、aの1は2つあり、aの2は1つ、bの1は1つなので、3種類存在する。
  3. 辞書として抽出する

以下のような辞書がほしいです。

[code]

    result = {"group1":3,"group2":4}
    
[/code]

知識不足ながらプログラム案を考えてみましたが、当然ながら、dict2の値でしか分類できていません。ご教示お願い致します。

[code]

    dict3 = {}
    import collections
    for k in dict2.keys():
      c = collections.Counter(dict2[k])
      if len(c) >= 2:
        dict3[k] = len(c)
    
    print(dict3)
    
    #出力
    {"group1":2,"group2":4}
    
[/code]


CC BY-SA 4.0
2023-02-22T07:38:24.253
93951
2023-02-22T08:16:40.943
2023-02-22T08:16:40.943
3060
57218
question
python
Pythonでの複数の辞書の値の比較について

[code]

    dict1 = {"group1":["a","a","b","a"],"group2":["a","a","a","a","a"]}
    dict2 = {"group1":["1","2","1","1"],"group2":["1","1","2","3","4"]}
    
    result = {k: len(set(zip(dict1[k], dict2[k]))) for k in dict1.keys()}
    print(result)
    
    # {'group1': 3, 'group2': 4}
    
[/code]


CC BY-SA 4.0
2023-02-22T08:00:43.260
93953
2023-02-22T08:00:43.260
47127
93951
answer


`dict1`と`dict2`のリストの各値を`('a','1')`のように`tuple`でまとめたものを要素とする集合(set)をつくります。  
その集合の要素数が求めたい個数になるかと思います。

[code]

    dict1 = {"group1":["a","a","b","a"],"group2":["a","a","a","a","a"]}
    dict2 = {"group1":["1","2","1","1"],"group2":["1","1","2","3","4"]}
    
    ret = {}
    for key,lst1 in dict1.items():
        lst2 = dict2[key]
        s = set([(v1,v2) for v1, v2 in zip(lst1, lst2)])
        print(s) # {('b', '1'), ('a', '1'), ('a', '2')} など
        ret[key] = len(s)
    
    print(ret) # {'group1': 3, 'group2': 4}
    
[/code]


CC BY-SA 4.0
2023-02-22T08:08:32.373
93954
2023-02-22T08:08:32.373
25830
93951
answer