具有函数作为参数的python dict.fromkeys

问题描述:

我需要将来自test_inputclasses的数据分组,即如果来自test_input的2个值相同,则它们应该具有相同的类。具有函数作为参数的python dict.fromkeys

我试图创建一个字典,但不能获得一流的管理如何可以做到:

@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”}

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开始),然后使用该编号,以产生一个类名称。