Печать данных из двух словарей в один для l oop in Python - PullRequest
1 голос
/ 30 апреля 2020

Я пытаюсь l oop 2 лота 'ключ, значение', чтобы я мог напечатать 2 лота данных в одной строке. Тем не менее, кажется, что мой код печатает вывод, который мне нужен, но он повторяется 4 раза, тогда как мне нужно, чтобы он печатался только один раз. Мой кусок кода:

    for key1, value1 in dict1.items():
        pct = value1 * 100.0 / s // 1
        for key2, value2 in dict2.items():
            pct2 = value2 * 20
            print(key1, ":", int(pct), "% vs", pct2, "%")

Вывод:

A : 55 % vs 60 %
A : 55 % vs 20 %
A : 55 % vs 0 %
A : 55 % vs 20 %
B : 25 % vs 60 %
B : 25 % vs 20 %
B : 25 % vs 0 %
B : 25 % vs 20 %
C : 0 % vs 60 %
C : 0 % vs 20 %
C : 0 % vs 0 %
C : 0 % vs 20 %
D : 17 % vs 60 %
D : 17 % vs 20 %
D : 17 % vs 0 %
D : 17 % vs 20 %

Но вывод мне нужен:

A : 55 % vs 60 %
B : 25 % vs 20 %
C : 0 % vs 0 %
D : 17 % vs 20 %

Я пробовал много способов обойти это , но я не могу понять, как распечатать нужный вывод.

Ответы [ 4 ]

1 голос
/ 30 апреля 2020

Для Python 3.6+, я бы порекомендовал

for k, v in dict1.items(): 
    print(f'{k} : {v * 100.0 / s}% vs {dict2[k] * 20}%')

В противном случае, я бы предложил

for k, v in dict1.items(): 
    print('{} : {}% vs {}%'.format(k, int(v * 100 / s), dict2[k] * 20))

Это также обеспечивает неявное предварительное условие для dict2, имеющего ключи которые являются слабым набором ключей dict1 (т. е. dict2 имеет все ключи, которые есть у dict1, а может и больше.

1 голос
/ 30 апреля 2020
for k in dict1: 
    print("{} : {}% vs {}%".format(k, int(dict1[k]*100.0 / s), dict2[k]*20))
0 голосов
/ 30 апреля 2020

Вы можете использовать функцию zip() для создания Iterable. Затем вы можете l oop на значения, подобные этому:

for keys in zip(dict1, dict2):

  # Get Keys
  key1 = keys[0]
  key2 = keys[1]

  # Get Values
  pct1 = dict1[key1]
  pct2 = dict2[key2]
  print(key1, ":", int(pct1), "% vs", pct2, "%")
0 голосов
/ 30 апреля 2020

Возможно, не лучшее решение, но я надеюсь, что оно будет работать

tmpValueForKey1 = 1
tmpValueForKey2 = 1
for key1, value1 in dict1.items():
    pct = value1 * 100.0 / s // 1
    for key2, value2 in dict2.items():
        pct2 = value2 * 20
        if tmpValueForKey1 == tmpValueForKey2:
            print(key1, ":", int(pct), "% vs", pct2, "%")
        tmpValueForKey2 = tmpValueForKey2 + 1
    tmpValueForKey1 = tmpValueForKey1 + 1
...