python - 从字典中读取时,我得到“int”对象没有属性“__getitem__”错误
问题描述
在一个 python 文件中,我将值存储在字典中,例如:
messageDict[ObservationRawDataId] = {'timestamp': TimeStamp, 'tanksystemid': TankSystemId,
'newDelivery': delivery,'oldDelivery':RawDeliveryLitres ,'grade' :ProductName,'sitecode':SiteCode}
formMessageBody(messageDict)
在另一个 python 文件中,我尝试从该字典中制定一个纯文本消息;
def formMessageBody( messageDict) :
try :
print 'SiteCode', 'Date', 'Product', 'NewDelievry','OldDelivery'
for tuple_a in messageDict.items():
for dic_a in tuple_a:
print tuple_a
print dic_a['sitecode']
print dic_a['sitecode'], dic_a['timestamp'], dic_a['grade'],
dic_a['newDelivery'],dic_a['oldDelivery']
except Exception as error:
print format(error)
但我无法从元组中读取值。tuple_a 打印为;
(14118912, {'newDelivery': '8397.000', 'grade': u'Unleaded', 'timestamp': datetime.datetime(2019, 6, 23, 0, 0), 'tanksystemid': 5977, 'oldDelivery': 8397.0, 'sitecode': u'1156'})
当我尝试检索时;dic_a['sitecode'] dic_a['timestamp'] 我明白了;
'int' object has no attribute '__getitem__'
错误。我在这里做错了什么?
messageDict 看起来不错;
{14090233: {'newDelivery': '5009.000', 'grade': u'E10', 'timestamp': datetime.datetime(2019, 6, 21, 0, 0), 'tanksystemid': 5776, 'oldDelivery': 5009.0, 'sitecode': u'4169'}, 14129146: {'newDelivery': '17091.000', 'grade': u'Unleaded', 'timestamp': datetime.datetime(2019, 6, 24, 0, 0), 'tanksystemid': 8720, 'oldDelivery': 17091.0, 'sitecode': u'2328'}, 14118907: {'newDelivery': '13797.000', 'grade': u'Unleaded', 'timestamp': datetime.datetime(2019, 6, 23, 0, 0), 'tanksystemid': 5973, 'oldDelivery': 13797.0, 'sitecode': u'1151'}, 14145533: {'newDelivery': '8281.000', 'grade': u'PULP', 'timestamp': datetime.datetime(2019, 6, 24, 0, 0), 'tanksystemid': 5360, 'oldDelivery': 8281.0, 'sitecode': u'2212'}, 14129150: {'newDelivery': '7099.000', 'grade': u'Diesel', 'timestamp': datetime.datetime(2019, 6, 24, 0, 0), 'tanksystemid': 8724, 'oldDelivery': 7099.0, 'sitecode': u'2328'}, 14129565: {'newDelivery': '16619.100', 'grade': u'Unleaded', 'timestamp': datetime.datetime(2019, 6, 24, 0, 0), 'tanksystemid': 10012, 'oldDelivery': 16619.1, 'sitecode': u'4217'}}
解决方案
其他人已经指出了这个问题,我将尝试更多地解释它为什么会以这种方式发生。
你messageDict
是一个以ObservationRawDataId
as 键和另一个 dict 作为值的字典。当您调用时messageDict.items()
,它会返回一个元组(ObservationRawDataId, {'timestamp': TimeStamp...
,因此元组中的第一个值是ObservationRawDataId
而不是dic_a
您所期望的。如果您想迭代这些值,您可以按照@Tomothy32 的建议进行操作:
for dic_a in messageDict.values():
print dic_a['sitecode']
print dic_a['sitecode'], dic_a['timestamp'], dic_a['grade'],
dic_a['newDelivery'], dic_a['oldDelivery']
或者,如果您也想ObservationRawDataId
在循环中的某处使用,您可以使用:
for rawDataId in messageDict.keys():
dic_a = messageDict[rawDataId]
print dic_a['sitecode']
print dic_a['sitecode'], dic_a['timestamp'], dic_a['grade'],
dic_a['newDelivery'], dic_a['oldDelivery']
推荐阅读
- c# - 类似于 RunWorkerCompleted 的 await/async 回调主线程
- android - android中的工具栏,折叠工具栏,应用栏,底部导航栏和操作栏有什么区别?
- php - 如何使用辅助类 WC_Product_Variation 正确创建 WooCommerce 变体
- r - acf() 函数绘制非常大的滞后
- docker - GKE 无法从 GCR 中提取图像
- php - CORS 问题 Angular + PHP REST API
- python - 必须调用 ray.init() 两次:第一次给出“AUTH
在没有为默认用户配置任何密码的情况下调用。” - sql - GitLab 管道错误:包 'mysql-client' 没有安装候选。我能做些什么?
- excel - 使用 vba 打开/保存 excel 文件时隐藏标准进度条
- firebase-authentication - 如果用户仍然存在于具有 OpenID Connect 的身份提供者上,身份工具包是否会重新验证