繁体   English   中英

如何在Python中检查数组中是否存在key:value(key:value)

[英]How to check in Python if a key:value exists in an array (key:value) exists

我有一个key:value对数组,使用对文档内容(实体提取)的循环生成。

entity_array.append({
    "key": entity.label_,
    "value": entity.text
})

我想补充一下,如果值的键已经存在,则不要追加,但是不确定如何使用键AND值。 原因是我收到很多重复的行。

我能够检查键OR值是否存在,但是由于实体可能属于多个键,因此无法提供所需的结果。

任何帮助表示赞赏。

听起来您正在使用的数据结构引起了一些问题。 如果要跟踪entity.label_entity.text值的重复组合,请考虑将组合视为一个namedtuple set ,并使用一个set快速检查重复项:

import collections

Entity = collections.namedtuple("Entity", ["key", "value"])  # a tuple called "Entity" with named elements
entity_set = set()  # empty set where we will store deduplicated combinations of label and text

for entity in your_iterable_here:
    entity_set.add(Entity(key=entity.label_, value=entity.text))  # add to the set if it's not there already, otherwise do nothing

如果需要,您甚至可以单线执行此操作:

entity_set = set(Entity(key=entity.label_, value=entity.text) for entity in your_iterable_here)

完成后,在entity_set中将有一组唯一的键/值对。 如果您绝对需要OP中提到的数据结构中的实体(字典列表),则一种选择是利用namedtuple._asdict()函数的功能(尽管名称中带有下划线,但这是一个完整记录的函数)和“ public” namedtuple接口的一部分):

entity_array = [entity._asdict() for entity in entity_set]

此解决方案有两个警告:

  1. 无论entity._labelentity.text是,它们必须是可哈希被放入一set 如果您存储的内容不是简单的值(例如字符串),则可以通过多种方法来解决,但它可能会变得复杂。
  2. your_iterable_here生成的实体的your_iterable_here将不会保留。 解决此问题的简便方法,例如使用带有Entity键和bool值而不是集合的OrderedDict

您可以为此实现自己的功能,例如,可以使用给定键调用get方法,并将返回值与指定值进行比较:

def exists(dict_:dict, key:str, value:object) -> bool:
    return dict_.get(key) == value

您必须检查两个条件-(a)如果目标字典中不存在该键,以及(b)如果该键存在但值不同。 在这两种情况下,您都必须将新值添加到字典中。

例如,假设dict {}是您的主要字典,而下面的values_to_add是一个新字典,其中包含一些需要添加到dict {}的值。 以下代码完成了您要执行的操作:

from itertools import combinations
from datetime import timedelta
import datetime
import pandas as pd
import numpy as np
import random as rd

dict = {
    "Key_1": "Value_1",
    "Key_2": "Value_2",
    "Key_3": "Value_3"
}

values_to_add = {
    "Key_1": "Value_X",
    "Key_4": "Value_4"
}

for key,value in values_to_add.items():
    if key in dict and dict[key] != value:
        dict[key]=value
    if not key in dict:
        dict[key] = value

dict

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM