【问题标题】:Unable to change data type from nested dictionary in list无法从列表中的嵌套字典更改数据类型
【发布时间】:2022-11-11 12:07:54
【问题描述】:

如何更改嵌套字典列表中的数据类型?

我尝试了以下代码,但我一直收到无效的参数。

results = json.load(response)

for date in results:
    last_update = datetime.datetime.fromtimestamp(date[0]['lastUpdatedAt'])
    date[0]['lastUpdatedAt'] = last_update

print(results)

json document : 
[{"createdByUser": {"id": "15156", "username": "kr.esat@.com", "first": "", "last": "", "role": 2, "userType": "normal", "hasLoggedIn": true, "lastLogin": 16662687523, "visitorIds": ["k.eat@cds.com"]}, "createdAt": 15735485109, "lastUpdatedByUser": {"id": "62484203008", "username": "ipres.com", "first": "I", "last": "Trs", "role": 2, "userType": "normal", "deletedAt": 1651734030, "hasLoggedIn": true, "lastLogin": 16197075936, "visitorIds": ["ipods.com", "0"]}, "lastUpdatedAt": 1578265850, "kind": "Guide", "rootVersionId": "-NXd1A-f3Iy6sOuYhycQLs", "stableVersionId": "-NXzsod1A-f3IcQLs-2028418", "appId": -323232, "appIds": [-323232], "id": "-NXzsod13I6ss", "name": "Accommodation Types", "state": "disabled", "emailState": "", "launchMethod": "auto", "isMultiStep": false, "isTraining": false]}

Here is the error: Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
KeyError: 0

Expected result: change epoch to date in lastUpdatedAt key
[{"createdByUser": {"id": "15156", "username": "kr.esat@.com", "first": "", "last": "", "role": 2, "userType": "normal", "hasLoggedIn": true, "lastLogin": 16662687523, "visitorIds": ["k.eat@cds.com"]}, "createdAt": 15735485109, "lastUpdatedByUser": {"id": "62484203008", "username": "ipres.com", "first": "I", "last": "Trs", "role": 2, "userType": "normal", "deletedAt": 1651734030, "hasLoggedIn": true, "lastLogin": 16197075936, "visitorIds": ["ipods.com", "0"]}, ***"lastUpdatedAt": 2015-02-02***, "kind": "Guide", "rootVersionId": "-NXd1A-f3Iy6sOuYhycQLs", "stableVersionId": "-NXzsod1A-f3IcQLs-2028418", "appId": -323232, "appIds": [-323232], "id": "-NXzsod13I6ss", "name": "Accommodation Types", "state": "disabled", "emailState": "", "launchMethod": "auto", "isMultiStep": false, "isTraining": false]}

【问题讨论】:

  • 您能否发布您的(确切)错误的最小工作示例?
  • 您能否更新您的问题并提出预期的结果?
  • 刚刚更新它。
  • data 是一个字典对象,0 不是它的键。

标签: python json list dictionary for-loop


【解决方案1】:

试试这样:

import datetime

print(results[0]['lastUpdatedAt'])
results[0]['lastUpdatedAt'] = datetime.datetime.fromtimestamp(results[0]['lastUpdatedAt'])
print(results[0]['lastUpdatedAt'])

输出

1578265850
2020-01-06 04:10:50

【讨论】:

    【解决方案2】:

    该问题与我没有将其除以 1000 的 for 循环有关。这是 datetime.datetime.fromtimestamp 的行为。 为了修复它,我将脚本更改为:

    results = json.load(response)
    
    for date in results:
        last_update = datetime.datetime.fromtimestamp((date[0]     
            ['lastUpdatedAt'])/1000).date()
        date[0]['lastUpdatedAt'] = last_update
    
    print(results)
    

    【讨论】:

    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 2018-01-31
    • 2016-01-11
    • 1970-01-01
    • 2016-02-16
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 2014-10-16
    相关资源
    最近更新 更多