Python 使用字典理解为值创建不同长度的字典

Python 使用字典理解为值创建不同长度的字典,python,python-2.7,Python,Python 2.7,以下是输入字符串: visa = (u'GPIB0::5::INSTR', u'GPIB0::3::INSTR', u'ASRL1::INSTR', u'ASRL2::INSTR') 我的代码是字典理解中的生成器,如下所示: {comm : node for comm, node in (instance.split('::')[0:2] for instance in visa)} 电流输出: {u'ASRL1': u'INSTR', u'ASRL2': u'INSTR', u'GP

以下是输入字符串:

 visa = (u'GPIB0::5::INSTR', u'GPIB0::3::INSTR', u'ASRL1::INSTR', u'ASRL2::INSTR')
我的代码是字典理解中的生成器,如下所示:

  {comm : node for comm, node in (instance.split('::')[0:2] for instance in visa)}
电流输出:

{u'ASRL1': u'INSTR', u'ASRL2': u'INSTR', u'GPIB0': u'3'}
期望输出:

{'ASRL1': 'INSTR', 'ASRL2': 'INSTR', 'GPIB0': (5, 3)}
有没有基于字典/生成器方法的方法

干杯,
I.

您可以为此使用
defaultdict

>>> import collections
>>> d = collections.defaultdict(list)
>>> for item in visa:
...     comm, node = item.split('::')[0:2]
...     d[comm].append(node)
然后,您可以将其转换为所需的数据结构,如下所示:

>>> {key: (value[0] if len(value) == 1 else tuple(value)) for key, value in d.items()}
{u'ASRL2': u'INSTR', u'ASRL1': u'INSTR', u'GPIB0': (u'5', u'3')}

这是一个好的!但我正在寻找一个不导入其他模块的解决方案。只是为了见鬼……:)你怎么去掉unicode符号(u)?干杯@弗拉门戈:可以对每个字符串调用
str()
,以删除Unicode符号(在2.7中)。然而,这可能不是正确的做法。