如何在Python中构造具有多个特征的元素

2024-10-06 12:22:28 发布

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

如果我有一组元素(a、B、C、D……),它们都有两个或更多的特征(每个特征都有一种颜色、一种形状等),我如何制作一个结构,以便我可以轻松地要求列出所有绿色元素或所有圆形元素?
我想过用字典,但我不知道这是否是实现这一目标的最有效方法。我知道每个物体的每个特征值永远不会改变。没有很多特征,但有很多对象。你知道吗

以下是布景:

test = {'ob1': {'color': ['green'], 
                'shape': 'round'},
        'ob2': {'color': ['red'], 
                'shape': 'round'},
        'ob3': {'color': ['green', 'yellow'], 
                'shape': 'cubic'}
        }

如果我想获得所有的绿色对象,我想要一个简单的方法来获得包含[ob1,ob2]的列表。但同时,我仍然希望能够轻松地找到给定对象的属性(例如,我想知道什么颜色和形状是obj1)。你知道吗


Tags: 对象方法元素颜色green特征圆形结构
3条回答

我不确定你的数据是什么样子的,所以很难提出建议,但这看起来像是pandas的工作。熊猫可以创建一个基本上像电子表格一样的数据框。导入数据后,可以根据特征进行过滤和排序。不过,在大多数情况下,词典是可以的。见pandas documentation。你知道吗

您可以使用namedtuple,这是一种有效的数据格式。你知道吗

from collections import namedtuple

Element = namedtuple('Element', 'color size id name')

ELEMENTS_DB = {'e1':Element('green', 12, 34, 'jack'),
               'e2':Element('blue', 132, 334, 'dan'),
               'e3':Element('green', 142, 434, 'ben')}

# get green elements
green_elements = [e for e in ELEMENTS_DB.values() if e.color == 'green']
print(green_elements)
# get 'e3' 
print(ELEMENTS_DB['e3'])

输出:

[Element(color='green', size=12, id=34, name='jack'), Element(color='green', 
  size=142, id=434, name='ben')]
Element(color='green', size=142, id=434, name='ben')

在我看来,熊猫是一个很好的方法。但你当然可以使用字典:

elements = ['A', 'B', 'C', 'D']
colors = ['red','red', 'blue', 'red']
shapes = ['square', 'circle', 'circle', 'triangle']


dict1 = { element: {'color':colors[index], 'shape':shapes[index]} for index,element in enumerate(elements)}


def find_keys(keyword):
    result = []
    for key, val in dict1.items():
        for k, v in val.items():
            if v == keyword:
                result.append(key)
    return result

print (find_keys('red'))

输出:

 print (find_keys('red'))
['A', 'B', 'D']

print (find_keys('circle')) 
['B', 'C']

相关问题 更多 >