Python 3.x 将文件名作为关键字返回字典,并将文件唯一的单词作为值返回单词列表

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"} 我在想也许可以分为不

我试图编写一个函数,只提取每个键的唯一单词,并在字典输出中列出它们,如{“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"}
我在想也许可以分为不同的清单

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'}}