【问题标题】:Get the key that has specific attribute of its value获取具有其值的特定属性的键
【发布时间】:2018-11-12 10:15:58
【问题描述】:

我有以对象列表作为值的字典。

class Device_Terminals():
    """Class for define object for each device"""
    def __init__(self, device_name, source, drain):
        self.device_name = device_name
        self.source = source
        self.drain = drain

device = Device_Terminals(line[0], line[1], line[3])
if line[2] not in devices_dict:
        devices_dict[line[2]] = []
devices_dict[line[2]].append(device)

我想返回其中一个对象具有特定名称的键,字典看起来像这样

{A1:[ MNA1 X_N1 VSS, MPA1_1 X X_P1_1, MPA1_2 X X_P1_2, MPA1_3 X X_P1_3, MPA1_4 X X_P1_4, MPA1_5 X X_P1_5, MPA1_6 X X_P1_6, MPA1_7 X X_P1_7], 'A3': [MNA3 X_N1 VSS, MPA3_1 X_P2_1 VDD, MPA3_2 X_P2_2 VDD, MPA3_3 X_P2_3 VDD, MPA3_4 X_P2_4 VDD, MPA3_5 X_P2_5 VDD]}

列表的每个元素都是一个对象。 如何返回其值为

的键
 device_name == MPA3_3: 
   return key

【问题讨论】:

  • 请更好地解释您在寻找什么?比如line 是什么,object 到底是什么意思,我不确定我是否完全理解你的这个问题。
  • 字典device_dict是什么样的?
  • 什么是device_dict?你的问题不是很清楚。请提供可重现的示例并清楚说明您的问题,以便其他人能够帮助您。
  • 我编辑了@Ananth 的问题
  • 能否请您展示您用于构建字典的代码。您的数据没有意义,因为 dicts 具有键值对。我在你的更新中没有看到。字典通常显示为{key: value, key: value}

标签: python dictionary key-value


【解决方案1】:

您可以从collections 创建defaultdict,而不是检查密钥是否存在然后附加到它。

from collections import defaultdict
devices_dict = defaultdict(list)

添加到这个字典:

device = Device_Terminals(line[0], line[1], line[3])
devices_dict[line[2]].append(device)

要搜索它的值,您可以在字典上放置一个简单的循环:

# your search term
search_val = 'device_name'
for key, devices in devices_dict.items():
    for device in devices:
        if search_val == device.device_name:
            print(key)

【讨论】:

  • 谢谢。这很有帮助!
【解决方案2】:

如果您尝试使用其值进行 dict 查找。试着看看这个先前回答的问题的解决方案。

Get key by value in dictionary

【讨论】:

  • 但是如果值是对象并且我需要特定的属性来比较呢? @boonwj
  • 由于字典中的值不是唯一的,你需要遍历字典中的所有值,得到你需要的数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-16
  • 1970-01-01
  • 2023-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多