如何读取字典中的元组

时间:2016-02-11 15:20:42

标签: python dictionary int tuples

我的问题是我重新阅读此内容但是在字符串中

obj = {"rnc": "44444044444",
         "cliente": "EMPRESA S.A.",
         "ncf": "1234567890123456789",
         "ncf_ref": "0987654321098765432",
         "tipo": "FacturaConsumidorFinal",     # Ver clase ReceiptEnum para valores permitidos
         "logo": false,
         "lineas": [{
             "descripcion": ["Linea 1", ..., "Linea 10"],
             "cantidad": 2,
             "importe": 12.00,
             "itbis": 13.0,
             "tipo_pago": "LineaVenta",        # Ver clase ReceiptItemEnum para valores permitidos
             "qtyxprice": True,
             "promocion": False"
            }],
         "pagos": [{
            "tipo": 1,                         # valor entre 1 y 14, según tipos de pago configurados
            "importe": 1200.00,
            "cancelado": False,
            "descripcion": ["linea 1", "linea 2", "lines 3"],
         }],
         "descuentos": [{                      # descuento o recargo global
            "descripcion": "lalalala",
            "importe": 1200.00
         }],
         "densidad": "ppp180x180"              # ver clase PrinterDensity para valores permitidos
        }

我使用

转换为字典
import ast
linea = ast.literal_eval(obj)

即时尝试阅读内线['importe']以将值12.00更改为1200当然使用int,我知道该怎么做,只需要乘以100 例如

#12.00
int(12.00*100) = 1200 #they always need to end with '00'
int(2*100) = 200

但是我不知道如何与linea ['itbis] ... pagos ['importe']和descuentos ['importe']达到相同的目标,并且结束它会像这样输出。

{"rnc": "44444044444",
     "cliente": "EMPRESA S.A.",
     "ncf": "1234567890123456789",
     "ncf_ref": "0987654321098765432",
     "tipo": "FacturaConsumidorFinal",     # Ver clase ReceiptEnum para valores permitidos
     "logo": false,
     "lineas": [{
         "descripcion": ["Linea 1", ..., "Linea 10"],
         "cantidad": 2,
         "importe": 1200,    #<----- here(12.00)
         "itbis": 1300,      #<----- here(13.00)
         "tipo_pago": "LineaVenta",        # Ver clase ReceiptItemEnum para valores permitidos
         "qtyxprice": True,
         "promocion": False"
        }],
     "pagos": [{
        "tipo": 1,                         # valor entre 1 y 14, según tipos de pago configurados
        "importe": 120000,     #<----- here (1200.00)
        "cancelado": False,
        "descripcion": ["linea 1", "linea 2", "lines 3"],
     }],
     "descuentos": [{                      # descuento o recargo global
        "descripcion": "lalalala",
        "importe": 120000   #<----- here (1200.00)
     }],
     "densidad": "ppp180x180"              # ver clase PrinterDensity para valores permitidos
    }

我试图

for k,v in obj.items():
for thing in v:
    print v

但是我得到了一个错误并结束了 Traceback(最近一次调用最后一次):   文件“”,第2行,in TypeError:'bool'对象不可迭代

非常感谢您阅读这个长篇解释x_X

1 个答案:

答案 0 :(得分:0)

您收到此错误,因为并非您的dict中的所有值都是可迭代的。如果你想迭代整个字典以找到你描述的值(即你不完全知道字典的内容),你可以这样做:

for k,v in obj.items():
    if hasattr(v, '__iter__'):
        for thing in v:
            print thing
    else:
        print v

if hasattr(v, '__iter__'):行会判断您的商品是否可以呈现(参考此问题In Python, how do I determine if an object is iterable?