如何在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()}