首页 > 解决方案 > Python 检查两个列表中的重复值和空值并映射它们

问题描述

我有两个名称和数字列表,其中包含一些空白和重复的条目

phone = ['918222822','92929129','','92929129','','12345678','12345678','1727398','']
name  = ['jhon', 'ele', '' , 'ele', '' , 'rock','rock','','burh']
  1. 如果您看到大多数数字映射到一个名称。
  2. 有一种情况,我输入了姓名空白的数字,反之亦然。

这是迄今为止尝试过的:

phone = ['918222822','92929129','','92929129','','12345678','12345678','1727398','']
name  = ['jhon', 'ele', '' , 'ele', '' , 'rock','rock','','burh']
phone = set(phone)
name = set(name)
for na, ph in zip(name,phone):
    if na is None:
       na = ph
    elif ph is None:
       #do something
       pass
    print(na,ph)

我想要得到的输出是:

输出

jhon  918222822
ele   92929129
rock  12345678
1727398   1727398  # if number found but not name then put number in name
                   # if only name found but no corresponding number then delete entries in both list   

标签: pythonpython-3.x

解决方案


phone = ['918222822','92929129','','92929129','','12345678','12345678','1727398','']
name  = ['jhon', 'ele', '' , 'ele', '' , 'rock','rock','','burh']

res = set([i for i in zip(phone, name) if i[0]])
res = dict((i[0], i[1]) if i[1] else (i[0], i[0]) for i in res)
print(res.keys())   #phone
print(res.values())  #name

输出:

['1727398', '918222822', '12345678', '92929129']
['1727398', 'jhon', 'rock', 'ele']

推荐阅读