Python 在没有阶梯状结构的字典中迭代键和值

Python 在没有阶梯状结构的字典中迭代键和值,python,Python,有没有一种方法,如果有的话,有没有人能告诉我如何在conf中获得与下面代码相同的结果,而不必通过两个字典的键和值进行长的阶梯式迭代 conf = 0 def dist(instr): return {x:instr.count(x)/float(len(instr)) for x in instr} for k,v in dist("aass").items(): for x,y in dist("as").items(): if k == x:

有没有一种方法,如果有的话,有没有人能告诉我如何在
conf
中获得与下面代码相同的结果,而不必通过两个字典的键和值进行长的阶梯式迭代

conf = 0

def dist(instr):
    return {x:instr.count(x)/float(len(instr)) for x in instr}

for k,v in dist("aass").items():
    for x,y in dist("as").items():
        if k == x:
            conf += .5
            if v == y:
                conf +=1
print(conf)
如果您只需要匹配键,只需在其他字典中查找该键:

d1 = dist('as')
for k, v in dist('aass').items():
    if k in d1:
        conf += 1.5 if d1[k] == v else .5
您还可以创建字典键的集合交集;在Python2中使用,在Python3中使用;它们生成一个类似于集合的集合:

d1, d2 = dist('as'), dist('aass')
for k in d1.viewkeys() & d2.viewkeys():  # use d1.keys() & d2.keys() in Py3
    conf += 1.5 if d1[k] == d2[k] else .5
如果您只需要匹配键,只需在其他字典中查找该键:

d1 = dist('as')
for k, v in dist('aass').items():
    if k in d1:
        conf += 1.5 if d1[k] == v else .5
您还可以创建字典键的集合交集;在Python2中使用,在Python3中使用;它们生成一个类似于集合的集合:

d1, d2 = dist('as'), dist('aass')
for k in d1.viewkeys() & d2.viewkeys():  # use d1.keys() & d2.keys() in Py3
    conf += 1.5 if d1[k] == d2[k] else .5

conf+=1.5 if condition else.5
甚至不知道这在python中是可能的。介意blown@FakeBrain这称为条件表达式。:-)在这种特殊情况下,您可以更简洁地编写条件表达式,如
conf+=0.5+(d1[k]==d2[k])
。(我不建议这样做。)@SvenMarnach是的,不,我会在代码评审中完全拒绝,因为它太聪明了;-)@MartijnPieters我不太喜欢条件表达式的Python语法,所以我总是想办法避免它。:)
conf+=1.5 if condition else.5
甚至不知道这在python中是可能的。介意blown@FakeBrain这称为条件表达式。:-)在这种特殊情况下,您可以更简洁地编写条件表达式,如
conf+=0.5+(d1[k]==d2[k])
。(我不建议这样做。)@SvenMarnach是的,不,我会在代码评审中完全拒绝,因为它太聪明了;-)@MartijnPieters我不太喜欢条件表达式的Python语法,所以我总是想办法避免它。:)