在python中使用键值条件合并两个数组

2024-06-01 20:47:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python新手。我只是想做一些事情来了解python

我现在要做的是合并两个大小相同的数组。条件是,如果key是一个特定的值(nk,在我的例子中),那么value应该附加到前一个key或当前key

下面是我编写的代码及其工作原理。我确信我写了一个非常糟糕的代码(初学者:)

下面的代码有两个数组。键和值。我想做的是,如果key中的值是nk,那么values数组中的特定元素将被附加到一个列表中,其中包含先前获得的key

import json


keys = ["one", "nk", "nk", "two", "nk", "three", "nk", "four", "nk"]
values = ["quick", "brown", "fox", "jumps", "on", "lazy", "dog", "asfdsagfds", "sdfgre"]
mydict = []
key = "head"
val = []

for i in range(0, len(keys)):
    if(keys[i] != "nk") :
        mydict.append({key:val})
        key = ""
        val = []
        key = keys[i]
        val.append(values[i])
    else :
        val.append(values[i])

    if(i == len(keys)-1) :
        mydict.append({key:val})

print(json.dumps(mydict, indent=4))

输出:

[
    {
        "head": []
    },
    {
        "one": [
            "quick",
            "brown",
            "fox"
        ]
    },
    {
        "two": [
            "jumps",
            "on"
        ]
    },
    {
        "three": [
            "lazy",
            "dog"
        ]
    },
    {
        "four": [
            "asfdsagfds",
            "sdfgre"
        ]
    }
]

现在的问题是,是否有任何简单的方法可以使用任何python内置函数来实现这一点


Tags: key代码jsonval数组keysquickone
2条回答

在Python中,可以使用zip函数同时迭代两个列表,并且可以:

keys = ["one", "nk", "nk", "two", "nk", "three", "nk", "four", "nk"]
values = ["quick", "brown", "fox", "jumps", "on", "lazy", "dog", "asfdsagfds", "sdfgre"]
container = []
my_dict = []
for k, v in zip(keys, values):
    if k != "nk":
        container = []
        my_dict.append({k: container})
    container.append(v)

一般来说,使用索引对列表进行迭代被认为是“非Pythonic的”

你的代码一点也不差。没有解决这个特定问题的内置函数,但是可以使用zip()并行迭代两个列表。使用zip()并结合dict包含对对象的引用而不是副本这一事实,可以在不跟踪数组索引的情况下编写代码:

keys = ["one", "nk", "nk", "two", "nk", "three", "nk", "four", "nk"]
values = ["quick", "brown", "fox", "jumps", "on", "lazy", "dog", "asfdsagfds", "sdfgre"]
key = "head"
acc = {key: []}
mydict = []

for new_key, value in zip(keys, values):

    if(new_key != "nk") :
        acc = {new_key: []}
        mydict.append(acc)
        key = new_key

    acc[key].append(value)

print(json.dumps(mydict, indent=4))

相关问题 更多 >