0

Есть словарь. Ключами выступают айдишники, значениями айпишки. Как узнать какие ключи имеет одинаковые значения? Словарь имеет вид

 '10214': '192.168.15.11',
 '10215': '192.168.15.12',
 '10216': '192.168.15.9',
 '10217': '192.168.15.7',
 '10218': '192.168.15.10',
 '10219': '192.168.15.102',
 '10220': '192.168.15.103',
 '10221': '192.168.15.104',
 '10222': '192.168.15.8',
 '10223': '192.168.15.36',

Хочу узнать какие айпишки дублируются. Подскажите как это можно сделать.

insolor
  • 49,104
kolas
  • 3

2 Answers2

2

Чтобы узнать какие ip встречаются больше одного раза:

from collections import Counter

dups = {ip for ip, count in Counter(id2ip.values()).items() if count > 1}
# -> {'192.168.15.102', '192.168.15.8'}

См. Как найти все дублирующиеся элементы в списке и количество их повторов?

Чтобы узнать какие id соответствуют повторяющимся ip, чтобы сгруппировать id по ip:

from collections import defaultdict

ip2ids = defaultdict(list)
for id, ip in id2ip.items():
    ip2ids[ip].append(id)

for ip, ids in ip2ids.items():
    if len(ids) > 1:
        print(f'{ip:15s}:', *ids)

Результат:

192.168.15.8   : 10216 10222
192.168.15.102 : 10218 10219
jfs
  • 52,361
1
my_dict = {'10214': '192.168.15.11',
 '10216': '192.168.15.8',
 '10218': '192.168.15.102',
 '10219': '192.168.15.102',
 '10220': '192.168.15.103',
 '10221': '192.168.15.104',
 '10222': '192.168.15.8',
 '10223': '192.168.15.36',} 


for x,y in my_dict.items():
    if list(my_dict.values()).count(y) > 1:
        print(x,y) 

Вывод:

10216 192.168.15.8
10218 192.168.15.102
10219 192.168.15.102
10222 192.168.15.8