我试图写一个函数来提取唯一的每个按键只有文字和像字典输出列出他们{“键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])。
谢谢。
你可以尝试这样的事情:
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: '六个'}
由于键可以具有与之相关联的多个唯一字,它是有道理的新字典中的值是一个容器类型对象来保存独特的话。
该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'}}