Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在defaultdict(python)中计算元组中唯一的关键元素?_Python_List_Tuples_Defaultdict - Fatal编程技术网

如何在defaultdict(python)中计算元组中唯一的关键元素?

如何在defaultdict(python)中计算元组中唯一的关键元素?,python,list,tuples,defaultdict,Python,List,Tuples,Defaultdict,我有以下字典,键是元组: defaultdict(<class 'float'>, {('abc', 'xyz'): 1.0, ('abc', 'def'): 3.0, ('abc', 'pqr'): 1.0, ('pqr', 'xyz'): 1.0, ('pqr', 'def'): 1.0}) 你的方法是正确的。但是如果你想计数的话,我建议你使用一个计数器对象 from collections import Counter c1 = Counter(k[0] for k i

我有以下字典,键是元组:

 defaultdict(<class 'float'>, {('abc', 'xyz'): 1.0, ('abc', 'def'):
 3.0, ('abc', 'pqr'): 1.0, ('pqr', 'xyz'): 1.0, ('pqr', 'def'): 1.0})

你的方法是正确的。但是如果你想计数的话,我建议你使用一个
计数器
对象

from collections import Counter

c1 = Counter(k[0] for k in d.keys())
c2 = Counter(k[1] for k in d.keys())
老实说,
d.keys()
在这里是多余的,因为默认情况下迭代是在键之上的



对于i.items()中的j,dictionary中的i的
不起作用,因为外循环产生dictionary键(元组),
items
不适用于
tuple

不管怎样,你似乎忽视了字典的价值。只需在键的第一部分使用
集合。计数器

d = {('abc', 'xyz'): 1.0, ('abc', 'def'):
 3.0, ('abc', 'pqr'): 1.0, ('pqr', 'xyz'): 1.0, ('pqr', 'def'): 1.0}

import collections

d1 = collections.Counter(k[0] for k in d)

print(d1)
结果:

Counter({'abc': 3, 'pqr': 2})
如果您想要浮点,我建议您在计数后转换为浮点,以避免浮点不准确:

{k:float(v) for k,v in d1.items()}
或者在一行中:

d1 = {k:float(v) for k,v in collections.Counter(k[0] for k in d).items()}
要将键保留为元组,请执行以下操作:

d1 = {(k,):float(v) for k,v in collections.Counter(k[0] for k in d).items()}

对于第二部分,只需使用
k[1]

我不理解您的计算:您忽略了这些值?abc=>5.0不是因为1+3+1吗?是的,我忽略了这些值,只是计算abc作为第一个关键元素和第二个关键元素分别出现的次数。谢谢!但是,我怎样才能得到一个带有浮点值的字典呢?@ru111如果你想要浮点计数,你需要做一些类似的事情:
c1={k:float(v)for k,v in c1.items()}
@ru111同样,虽然你可以转换(见上面的注释),但我建议不要这样做,因为使用浮点值进行计数似乎违反直觉。我如何才能得到一个带有浮点值的字典?有没有一种简单的方法可以将最终的字典键转换为元组?e、 defaultdict(,{('abc',):3.0,('pqr',):3.0})参见我的编辑,相当简单。我想你会掌握窍门的。
Counter({'abc': 3, 'pqr': 2})
{k:float(v) for k,v in d1.items()}
d1 = {k:float(v) for k,v in collections.Counter(k[0] for k in d).items()}
d1 = {(k,):float(v) for k,v in collections.Counter(k[0] for k in d).items()}