【问题标题】:More efficient/stylish code to convert data structure更高效/时尚的代码来转换数据结构
【发布时间】:2014-03-13 15:06:48
【问题描述】:

您知道转换此列表的更好/更快的解决方案

['foo1:bar1', 'foo2:bar2', 'foo3:bar3']

进入下面的字典

{'col2': ['bar1', 'bar2', 'bar3'], 'col1': ['foo1', 'foo2', 'foo3']}

由于有两个 for 循环,当前版本看起来有点奇怪,而且可能很慢。

tuples = ['foo1:bar1', 'foo2:bar2', 'foo3:bar3']
tuples_separated = [one.split(':') for one in tuples]
tidied = {'col1': [], 'col2': []}
for one in tuples_separated:
    tidied['col1'].append(one[0])
    tidied['col2'].append(one[1])

【问题讨论】:

    标签: python performance python-2.7 coding-style


    【解决方案1】:

    使用zip 压缩项目?

    In [15]: d={}
        ...: vals=zip(*(i.split(':') for i in tuples))
        ...: d['col1'], d['col2']=vals
        ...: print d
    {'col2': ('bar1', 'bar2', 'bar3'), 'col1': ('foo1', 'foo2', 'foo3')}
    

    【讨论】:

    • 非常好,谢谢。 'vals' 对于稍微改变的赋值是不必要的: (split['col1'], split['col2']) = zip(*(tuple.split(':') for tuple in tuples))
    【解决方案2】:

    你可以使用:

    dict(zip(('col1', 'col2'), 
         zip(*[item.split(':') for item in x])))
    

    In [93]: x = ['foo1:bar1', 'foo2:bar2', 'foo3:bar3']
    
    In [94]: [item.split(':') for item in x]
    Out[94]: [['foo1', 'bar1'], ['foo2', 'bar2'], ['foo3', 'bar3']]
    
    In [95]: zip(*[item.split(':') for item in x])
    Out[95]: [('foo1', 'foo2', 'foo3'), ('bar1', 'bar2', 'bar3')]
    
    In [96]: dict(zip(('col1', 'col2'), zip(*[item.split(':') for item in x])))
    Out[96]: {'col1': ('foo1', 'foo2', 'foo3'), 'col2': ('bar1', 'bar2', 'bar3')}
    

    【讨论】:

      【解决方案3】:

      您也可以试试这个,它适用于任意数量的列:

      >>> tuples = ['foo1:bar1', 'foo2:bar2', 'foo3:bar3']
      >>>
      >>> {'col'+str(i+1):t for i,t in enumerate(zip(*(s.split(':') for s in tuples)))}
      {'col2': ('bar1', 'bar2', 'bar3'), 'col1': ('foo1', 'foo2', 'foo3')}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-18
        • 1970-01-01
        • 1970-01-01
        • 2011-08-12
        • 2012-04-20
        • 1970-01-01
        相关资源
        最近更新 更多