```

    lists = { ('田中', '山田 '): { '鈴木 ', '佐藤 ' },('伊藤', '鈴木 '): { '佐藤', '山田' },('佐藤', '田中 '): { '鈴木 ' }}
    
```

上記のようなリストを与えられたとき ('田中', '山田 '): { '鈴木 ', '佐藤 '
}のように():{}をひとまとまりにして{}ないを()の監督にしたいです。

```

    lists = { ('田中', '山田 '): { '佐藤 ' },('伊藤', '鈴木 '): {'山田' },('佐藤', '田中 '): { '鈴木 ' }}
    
```

このように監督はいわゆるキーとして設定したいため、重複している要素を取り除きたいです。

importはなしでお願いします

手順：

```

    #入力リスト
    lists = { ('田中', '山田 '): { '鈴木 ', '佐藤 ' },('伊藤', '鈴木 '): { '佐藤', '山田' },('佐藤', '田中 '): { '鈴木 ' }}
    
    #リスト内で重複していてペアがいるものを探してもしいたら消す。
    #この場合リスト{'鈴木 '}を消してしまうとリストの数が減ってしますので{'鈴木 ', '佐藤 '}の'鈴木'をけす。
    lists = { ('田中', '山田 '): { '佐藤 ' },('伊藤', '鈴木 '): { '佐藤', '山田' },('佐藤', '田中 '): { '鈴木 ' }}
    
    #上記のことを繰り返す。
    #この場合リスト('G')を消してしまうとリストの数が減ってしますので('G', 'J')の'G'をけす。
    lists = { ('田中', '山田 '): { '佐藤 ' },('伊藤', '鈴木 '): {'山田' },('佐藤', '田中 '): { '鈴木 ' }}
    
```

上記の手順をいくつかの同じようなリストで試せるようにしたいです。  
また、以下のような一意にできないリストの場合はNoneを返したいです。

```

    liats = { ('田中', '鈴木 '): { '佐藤 ', '伊藤' },
    ('佐藤', '山田 '): { '伊藤', '田中' },
    ('伊藤', '田中'): { '佐藤 ' },
    ('山田 ', '田中'): set()}
    
```

長くなりましたがよろしくお願いします。‍♂️
CC BY-SA 4.0
2023-05-18T03:48:14.220
94889
2023-05-21T10:48:21.763
2023-05-18T04:24:57.810
3060
58347
question
python array
pythonでキー値とペアの製作、編集
```

    # 複数の VALUE の要素に存在する VALUE の要素を抽出
    def multi_vals(dic):
        vals = sum(map(list, dic.values()), [])
        return [v for v in set(vals) if vals.count(v) > 1]
    
    # すべての VALUE の要素が１個で同じものがなければ true
    def one_val_dic(dic):
        lst = [*dic.values()]
        return all(len(v) == 1 == lst.count(v) for v in dic.values())
    
    # VALUE の要素数を１にする（VALUE 内要素が他の VALUE 内にあれば、この重複を削除する）
    def to_oneval_dic(dic):
        def reduce_dic(dic_, v):
            dic = dic_.copy()
            for k in dic.keys():
                if len(dic[k]) > 1 and v[0] in dic[k]:
                    dic[k] = dic[k]-{v[0]}
                    if (vals:=multi_vals(dic)):
                        dic = reduce_dic(dic, vals)
                    if dic and one_val_dic(dic):
                        return dic
                    dic = dic_.copy()
            return None
        return dic if one_val_dic(dic) else reduce_dic(dic, multi_vals(dic))
    
    dic = {('田中','山田'):{'鈴木','佐藤'},('伊藤','鈴木'):{'佐藤','山田'},('佐藤','田中'):{'鈴木'}}
    dic2 = to_oneval_dic(dic)
    print(dic2)  # {('田中','山田'):{'佐藤'},('伊藤','鈴木'):{'山田'},('佐藤','田中'):{'鈴木'}}
    
```
CC BY-SA 4.0
2023-05-21T10:48:21.763
94929
2023-05-21T10:48:21.763
41756
94889
answer