私は次のものを使用しています:http://deron.meranda.us/data/nicknames.txtほとんどの名前にニックネームがあります。次のように私はそれを使用しています:辞書の値リストからpythonの同じリスト内の別の要素に一致する要素
def load_names():
with open('file.txt', 'r') as infile:
outdict = collections.defaultdict(list)
for i, line in enumerate(infile.readlines()):
tmp = line.strip().split('\t')
outdict[tmp[1]].append((tmp[0]))
return dict(outdict)
これは、そのキーの値のリストなどのキーとそのすべてのニックネーム実際の名前辞書を返します。
さて、私はその後、私は出力に
namelist = ['KEN', 'KENNY', 'KENNETH', 'MITCH', 'MITCHELL', 'LIZ', 'LIZZIE', 'ELIZABETH']
をしたいたとき、私はによって行うことができるよ唯一異なる名前すなわち、['KENNETH', 'MITCHELL', 'ELIZABETH']
、:しかし
l = load_names()
temp =[]
for i in namelist:
v = l.get(i)
if v is not None:
l3 = [x for x in namelist if x not in v]
temp.append(l3)
print(temp)
s = set.intersection(*map(set,temp))
s = list(s)
print(s)
、私はまた、 ['KEN', 'KENNY', 'MITCH', 'MITCHELL', 'LIZ', 'LIZZIE', 'ELIZABETH']
のようなケースを処理したい場合は、['KEN', 'MITCHELL', 'ELIZABETH']
という2つのニックネーム「KEN」と「KENNY」が同じキーに属するので、それらを1つとみなして最終的なリストに1つしか入れません。また、['KENNETH, 'ZHAO', 'MITCH', 'MITCHELL']
という名前リストがある場合、それは出力する必要があります:['KENNETH', 'ZHAO', 'MITCHELL']
つまり、辞書にはまったく(キーまたは値のいずれでも)存在しない名前の場合、出力リストにはその名前が残っているはずです。 どうすれば入手できますか?
UPATE:
outdict = {'KENNETH': ['KEN', 'KENNY'], 'MITCHELL': ['MITCH'], 'ELIZABETH' : ['LIZ', 'LIZZIE'], .....}
namelist1 = ['KEN', 'KENNY', 'KENNETH', 'MITCH', 'MITCHELL', 'LIZ', 'LIZZIE', 'ELIZABETH']
output1 = `['KENNETH', 'MITCHELL', 'ELIZABETH']`
は私が入れているコードから上記の出力を取得しています。
namelist2 = ['KEN', 'KENNY', 'MITCH', 'MITCHELL', 'LIZ', 'LIZZIE', 'ELIZABETH']`
output2 = `['KEN', 'MITCHELL', 'ELIZABETH']`
namelist3 = ['KENNETH, 'ZHAO', 'MITCH', 'MITCHELL']`
output3 = `['KENNETH', 'ZHAO', 'MITCHELL']`
は自分自身を答えを得た:名前リストである場合には、以下のように
はしかし、私はまた、次の出力を得ることができるようにしたい
l = load_names()
temp =[]
e = {}
for n in namelist:
if n in l.keys():
temp.append(n)
for ix in namelist:
for key, i in l.items():
if key in namelist:
continue
else:
b=0
if ix in i:
b=1
f=0
for x in temp:
if x in i:
f=1
break
if f == 0:
temp.append(ix)
break
b=0
for k2, loc in l.items():
if ix in loc:
b=1
break
elif ix == k2:
b=1
break
if b == 0:
temp.append(ix)
break
print(temp)
セットに "実際の" 名前を追加しますか? – wmorrell
@wmorrellどういう意味ですか? – Rajiv
別のリストに名前を追加するのではなく、 'set'を使います。それが何のためのものなのです。 – wmorrell