python dict.fromkeys,函数作为参数

时间:2016-04-29 07:07:35

标签: python dictionary

我需要将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”}

1 个答案:

答案 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开始)进行编号,然后使用该数字生成类名。