【问题标题】:How to modify a Python JSON objects array如何修改 Python JSON 对象数组
【发布时间】:2016-02-11 02:08:59
【问题描述】:

假设如下:

sp_sample=[{"t":1434946093036,"v":54.0},{"t":1434946095013,"v":53.0},{"t":1434946096823,"v":52.0}

我希望我能得到以下结果:

sp_sample=[{"t":1434946093036,"v":5400.0},{"t":1434946095013,"v":5300.0},{"t":1434946096823,"v":5200.0}

换句话说,我希望我可以遍历数组并将 v 乘以 100 倍。

下面只对第一项进行乘法运算,即得到 54000 :

for i, a in enumerate(sp_sample):
    a[i]['v'] =  a[i]['v'] * 100

sp_sample 是元组类型。使用以下产生整个数组,这不是我所期望的:

print sp_sample[0]

另外,尝试打印 sp_sample :

print sp_sample

返回以下内容(为简洁起见,替换为 .......):

([{'t': 1434946093036, 'v': 54.0}, {'t': 1434946095013, 'v': 53.0}, {'t': 1434946096823, 'v': 52.0}, {'t': 1434946098612, 'v': 52.0}, {'t': 1434946100400, 'v': 51.0}, {'t': 1434946102372, 'v': 49.0},........, {'t': 1434947987823, 'v': 15.0}, {'t': 1434947989851, 'v': 12.0}, {'t': 1434947991899, 'v': 10.0}, {'t': 1434947993744, 'v': 5.0}, {'t': 1434947995599, 'v': 0.0}, {'t': 1434947997455, 'v': 0.0}, {'t': 1434947999494, 'v': 0.0}, {'t': 1434948001542, 'v': 0.0}, {'t': 1434948003417, 'v': 0.0}, {'t': 1434948005264, 'v': 0.0}, {'t': 1434948007120, 'v': 0.0}],)

打印类型(sp_sample)返回:

【问题讨论】:

    标签: python arrays json python-2.7


    【解决方案1】:

    只需遍历列表并随时更新字典:

    sp_sample = [{"t":1434946093036,"v":54.0},{"t":1434946095013,"v":53.0},{"t":1434946096823,"v":52.0}]
    
    for d in sp_sample:
        d['v'] *= 100
    
    >>> print(sp_sample)
    [{'t': 1434946093036, 'v': 5400.0}, {'t': 1434946095013, 'v': 5300.0}, {'t': 1434946096823, 'v': 5200.0}]
    

    这将依次将列表(元组?)sp_sample 中的每个字典绑定到 d,然后您将其更新到位。你不需要使用enumerate()

    请注意,您确实需要乘以 100,而不是 10000,才能获得您显示的输出。


    更新

    sp_sample 实际上是一个以字典列表作为其唯一项的元组。所以你需要像这样访问元组中的列表:

    sp_sample = ([{"t":1434946093036,"v":54.0},{"t":1434946095013,"v":53.0},{"t":1434946096823,"v":52.0}],)
    
    for d in sp_sample[0]:    # N.B. access first item of tuple
        d['v'] *= 100
    >>> print(sp_sample)
    [{'t': 1434946093036, 'v': 5400.0}, {'t': 1434946095013, 'v': 5300.0}, {'t': 1434946096823, 'v': 5200.0}]
    

    或者,由于元组只包含一个项目,您可以通过以下方式摆脱元组:

    sp_sample = sp_sample[0]
    for d in sp_sample:
        d['v'] *= 100
    

    【讨论】:

    • Python 返回以下内容: Traceback(最近一次调用最后一次):文件“./gear_add_10.py”,第 20 行,在 d['v'] *= 100 TypeError: list indices必须是整数,而不是 str
    • 那么sp_sample 是一个列表列表,而不是一个字典列表,正如人们对您问题中的样本数据所期望的那样。也许您可以在进入更新循环之前尝试打印sp_sample 的值并仔细检查数据类型。
    • 如果 sp_sample 实际上是一个列表列表,那么您需要将代码更改为 for item in sp_sample: item[1] *= 100`。
    • 我有一种感觉,根据Python,数组是一项长,看起来它无法理解嵌入的对象。
    • 从更新到您的问题,您似乎有一个带有单个列表项的元组,它是一个字典列表。因此,将您的代码更改为:for d in sp_sample[0]: d['v'] *= 100 应该可以修复它。
    猜你喜欢
    • 2016-10-16
    • 1970-01-01
    • 1970-01-01
    • 2021-09-27
    • 1970-01-01
    • 1970-01-01
    • 2016-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多