Python 3.x 将文件名作为关键字返回字典,并将文件唯一的单词作为值返回单词列表
我试图编写一个函数,只提取每个键的唯一单词,并在字典输出中列出它们,如{“key1”:“unique words”,“key2”:“unique words”,…}。我从一本字典开始。为了测试,我创建了一个简单的字典:Python 3.x 将文件名作为关键字返回字典,并将文件唯一的单词作为值返回单词列表,python-3.x,function,iteration,slice,Python 3.x,Function,Iteration,Slice,我试图编写一个函数,只提取每个键的唯一单词,并在字典输出中列出它们,如{“key1”:“unique words”,“key2”:“unique words”,…}。我从一本字典开始。为了测试,我创建了一个简单的字典: d = {1:["one", "two", "three"], 2:["two", "four", "five"], 3:["one","four", "six"]} 我的输出应该是: {1:"three", 2:"five", 3:"six"} 我在想也许可以分为不
d = {1:["one", "two", "three"], 2:["two", "four",
"five"], 3:["one","four", "six"]}
我的输出应该是:
{1:"three",
2:"five",
3:"six"}
我在想也许可以分为不同的清单
def return_unique(dct):
Klist = list(dct.keys())
Vlist = list(dct.values())
aList = []
for i in range(len(Vlist)):
for j in Vlist[i]:
if
我一直坚持的是如何告诉Python这样做:如果Vlist[I][j]不在Vlist的其余部分,那么aList.append(Vlist[I][j])
谢谢。您可以尝试以下方式:
def return_unique(data):
all_values = []
for i in data.values(): # Get all values
all_values = all_values + i
unique_values = set([x for x in all_values if all_values.count(x) == 1]) # Values which are not duplicated
for key, value in data.items(): # For Python 3.x ( For Python 2.x -> data.iteritems())
for item in value: # Comparing values of two lists
for item1 in unique_values:
if item == item1:
data[key] = item
return data
d = {1:["one", "two", "three"], 2:["two", "four", "five"], 3:["one","four", "six"]}
print (return_unique(d))
结果>>{1:'three',2:'five',3:'six'}由于一个键可能有多个与之关联的唯一单词,因此新字典中的值作为容器类型对象来保存唯一单词是有意义的 运算符返回两组之间的差值:
>>> a = set([1, 2, 3])
>>> b = set([2, 4, 6])
>>> a - b
{1, 3}
我们可以使用它来获取每个键的唯一值。将这些功能打包到一个简单的函数中,可以得到:
def unique_words_dict(data):
res = {}
values = []
for k in data:
for g in data:
if g != k:
values += data[g]
res[k] = set(data[k]) - set(values)
values = []
return res
>>> d = {1:["one", "two", "three"],
2:["two", "four", "five"],
3:["one","four", "six"]}
>>> unique_words_dict(d)
{1: {'three'}, 2: {'five'}, 3: {'six'}}
如果您只需要做一次,那么您可能会对效率较低但更为一致的词典理解感兴趣:
>>> from functools import reduce
>>> {k: set(d[k]) - set(reduce(lambda a, b: a+b, [d[g] for g in d if g!=k], [])) for k in d}
{1: {'three'}, 2: {'five'}, 3: {'six'}}