返回文件名作为键和单词列表的词典与独特的文件作为值的词语

问题描述 投票:1回答:2

我试图写一个函数来提取唯一的每个按键只有文字和像字典输出列出他们{“键1”:“唯一字”,“KEY2”:“唯一字”,...}。我开始了与一本字典。为了测试与我创建了一个简单的解释:

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])。

谢谢。

python-3.x function iteration slice
2个回答
1
投票

你可以尝试这样的事情:

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: '三',2: '五',3: '六个'}


1
投票

由于键可以具有与之相关联的多个唯一字,它是有道理的新字典中的值是一个容器类型对象来保存独特的话。

set difference运算符返回2套之间的区别:

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

如果你只有这样做一次,那么你可能有兴趣在欠efficeint但更consice字典解析:

>>> 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'}}
© www.soinside.com 2019 - 2024. All rights reserved.