考虑以下词典:
if ($_POST['content'] == 'xxx') {
}
else if ( /*etc..*/ ) {}
我想将其转换为两个列表或元组:
{'key1': ['PTRG0097',
'CPOG0893',
'MMUG0444',
'BTAG0783'],
'key2': ['CPOG0893',
'MMUG0444',
'PPYG0539',
'BTAG0083']}
如果没有在Python 3中循环,可能有一种简单的方法可以做到这一点,但我发现的一些解决方案(例如Split dictionary of lists into single lists)并没有以这种方式扩展dict。
答案 0 :(得分:3)
如果没有显式循环并假设使用Python3,这就是人们如何做到的。
>> list(zip(*[(k, v) for k, vs in d.items() for v in vs]))
[('key2', 'key2', 'key2', 'key2', 'key1', 'key1', 'key1', 'key1'),
('CPOG0893',
'MMUG0444',
'PPYG0539',
'BTAG0083',
'PTRG0097',
'CPOG0893',
'MMUG0444',
'BTAG0783')]
仅需要初始调用list
来打印迭代器。如果要将值保存在变量中,则不需要它:
[keys, values] = zip(*[(k, v) for k, vs in d.items() for v in vs])
答案 1 :(得分:2)
如果没有循环,这是不可能的,但是你可以在没有显式循环的情况下做到这一点:
inflate()
在实践中,你当然会选择musically_ut的答案,而不是这个难以理解的废话。
答案 2 :(得分:1)
您可以通过这种方式获取键和值的元组列表:
key_values = [(k, v) for k, vs in a.items() for v in vs]
然后从列表中获取一个键和值的列表,如果这更有价值:
keys = [i[0] for i in key_values]
values = [i[1] for i in key_values]
答案 3 :(得分:1)
keys = ['key1' for x in d['key1']] + ['key2' for x in d['key2']]
values = d['key1'] + d['key2']
虽然,我认为可能是一个简单的版本的键'不使用列表推导的行。