我正在尝试比较列表中的2个项目,这些项目可以用作字典中的值,但是它一直在转换为numpy.int64,我不明白为什么。
我仅使用第一个循环和第二个循环测试了“ valores”类型。在第一个中,我得到一个列表,但是在第二个中,我得到numpy.int64。
import pandas as pd
import pprint
.
.
.
questionario = {'a': [1, 2], 'b': [3, 4], 'c': [5, 6]}
for variavel, valores in questionario.items():
for q_passado, q_atual in valores:
if q_passado and q_atual != 0:
if q_atual / q_passado > 0.5:
print(variavel, q_passado, q_atual)
我希望输出为“ a 1 2”之类的东西,
答案 0 :(得分:0)
编写!= 0条件时,您犯了一个错误。您需要将这些条件分开,否则运算符优先级会弄乱逻辑。
您可以使用理解将其缩减为一行:
questionario = {'a': [1, 2], 'b': [3, 4], 'c': [5, 6], 'd' :[1, 0], 'e': [14,6]}
output = ["{} {} {}".format(k, v[0], v[1]) for k,v in questionario.items() if v[0] != 0 and v[1] != 0 and v[1]/v[0] > 0.5]
输出为:
['a 1 2', 'c 5 6', 'b 3 4']
说明:
for k,v in questionario.items()
这将从字典中提取键值对
if v[0] != 0 and v[1] != 0 and v[1]/v[0] > 0.5
这捆绑了您在循环中编写的条件。
结果,k,v
将仅包含满足这些条件的值。
最后,这会将值添加到字符串中并将它们包装在列表中:
"{} {} {}".format(k, v[0], v[1])
答案 1 :(得分:0)
您不能将变量分配给列表。而是一一分配变量。
OLD: for q_passado, q_atual in valores:
NEW: q_passado, q_atual = valores[0], valores[1]
Result:
a 1 2
b 3 4
c 5 6
答案 2 :(得分:0)
valores
(for q_passado, q_atual in valores
)不需要for循环,因为它是2个元素的列表,可由表达式valores[0]
和valores[1]
访问。您只需将其更改为:
import pandas as pd
import pprint
questionario = {'a': [1, 2], 'b': [3, 4], 'c': [5, 6]}
for variavel, valores in questionario.items():
if valores[0] and valores[1]!= 0:
if valores[1] / valores[0] > 0.5:
print(variavel, valores[0], valores[1])