我需要将test_input
的数据与classes
分组,即如果来自test_input
的2个值相同,则它们应该具有相同的类。
我试图创建一个字典但无法获得如何完成类管理:
@pytest.mark.parametrize("test_input,expected", [
([23,33,33,53,63,73,83,93,103], 'dictwithclass'),
])
def test_colorize(test_input, expected):
classes = ("colore1","colore2","colore3","colore4","colore5","colore6","colore7","colore8","colore9","colore10")
insiemi=set(test_input)
result = dict.fromkeys(insiemi, classi)
应输出:
{33:“colore1”,83:“colore2”,53:“colore3”,103:“colore4”,73: “colore5”,23:“colore6”,93:“colore7”,63:“colore8”}
答案 0 :(得分:2)
dict.fromkeys()
会将所有键设置为相同的单值。您无法使用它来设置多个不同的值。
使用zip()
配对您的键和值,然后将生成的(key, value)
对序列直接传递给dict()
类型:
classes = ('colore1', 'colore2', 'colore3', 'colore4', 'colore5', 'colore6', 'colore7', 'colore8', 'colore9', 'colore10')
result = dict(zip(set(test_input), classes))
请注意,由于set()
个对象无序,因此您无法确定哪个键与此处的哪个类相关。对于整数值,该顺序在解释器的调用之间是稳定的,但可以从Python版本到Python版本不同。
演示:
>>> classes = ('colore1', 'colore2', 'colore3', 'colore4', 'colore5', 'colore6', 'colore7', 'colore8', 'colore9', 'colore10')
>>> dict(zip(set(test_input), classes))
{33: 'colore1', 103: 'colore2', 73: 'colore3', 83: 'colore4', 53: 'colore5', 23: 'colore6', 93: 'colore7', 63: 'colore8'}
以上假设永远不会有超过10个唯一密钥;在这里生成类名称可能更好:
result = {key: 'colore{}'.format(i) for i, key in enumerate(set(test_input), 1)}
这使用enumerate()
函数对集合中的每个元素(从1开始)进行编号,然后使用该数字生成类名。