【问题标题】:Access array based on number of named key基于命名键数量的访问数组
【发布时间】:2014-10-02 18:12:57
【问题描述】:
json_data = {"fruits": ["apple", "banana", "orange"],"vegetables":["tomatoe", "cucumber", "potato"]}

如何在不包含数字键的情况下以数字方式访问我的数组?

例如:

json_data[0][0] #result should equal "apple"

【问题讨论】:

    标签: python json python-3.x


    【解决方案1】:

    你不能。外层容器是无序字典,不是列表,所以索引为 0 是没有意义的。如果您有某种方式对键进行排序,则可以使用 dict.keys() 函数来构建一个列表并为其编制索引。问题是,keys() 可以按任何顺序出现,所以你仍然需要一些其他的排序原则。

    【讨论】:

    • 你能举个例子吗?因为我刚才已经尝试过几次了,dict.keys() 似乎总是以正确的顺序出现......没关系我把它搞砸了。谢谢
    • @TehTris - 我的机器上没有。 json_data.keys() --> ['vegetables', 'fruits'],只有 2 个条目我们有 50/50 的机会是正确的。 dict 键是一个哈希表,因此它们的顺序会随着项目的添加/删除而改变。有 collections.ordereddict 可能会有所帮助。但是如果这真的是 json 数据,它一开始是无序的,所以你可以做的不多。
    【解决方案2】:
    json_data[list(json_data.keys())[0]][0]
    

    这是如何做到的,但这是非常错误的、丑陋的和不符合标准的,你可能应该寻找另一种方法来做到这一点。

    json_data.keys()内部开始返回所有键

    list() 将这些键转换为列表 [0] 之后,访问列表中的第零项

    json_data[] 左右键访问列表

    [0] 访问返回列表中的第零项后

    也不能保证 100% 的工作,因为 json_data.keys() 不能保证总是以相同的顺序输出。

    【讨论】:

    • 字典在 json 和 python 中都是无序的。无法保证您会两次获得相同的条目,尤其是在涉及不同组合键的情况下。
    • 你的 json_data.keys() 是无序的。
    • 同意。它恰好适用于他的列表字典,但不适用于同一事物的所有实例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多