在通用列表中拆分unicode字符串

所以我的数据看起来像这样:


data = {"technology1": [

       [

       20, 0.02,

      u'10.00,106.10,107.00,107.00,0.45',

      u'24.00,-47.15,-49.50,-51.00,0.12',

      u'11.00,0.35,0.00,0.00,0.92',

      u'0.00',0.04,0.16, u'0.223196881092', u'f',0.02,

     ], 

      [

       100, 0.02,

  u'10.00,106.10,107.00,107.00,0.45',

  u'24.00,-47.15,-49.50,-51.00,0.12',

  u'11.00,0.35,0.00,0.00,0.92', u'0.00', 0.04,

  0.16, u'0.223196881092',  u'f', 0.01

   ] ... ],


       "technology2": ...}

如您所见,它是一个字典,每个键都访问一个列表列表,所有列表都具有相同的格式。每个“内部”列表都包含整数,浮点数。还有unicode字符串,其中一些带有单个值,某些在unicode字符串中带有一组5个数字。


我想要的是:


为每种技术制作一个阵列。在每个数组中,行将是上面的“外部”列表,列将是“内部列表”的不同元素。理想情况下,需要将unicode转换为字符串(因为我知道如何更好地使用它们),并且unicode字符串中的5个数字的集合需要扩展为每个元素。


即技术阵列


20, 0.02, 10.00, 106.10, ... "f", 0.02

100, 0.02, ...            "f", 0.01

到目前为止的尝试:


for tech in data:


    features = data[tech] # i.e. grab technologyn

    for row in features:

        for i in row[2:5]: # 2 til 5 defines the instance which are sets of 5

            #print i,"\n"

            i = str(i)

            i = i.split(',')

这是行不通的,当我在代码执行后查看功能时,它是完全一样的!


这并不是一个完整解决方案的尝试,因为它显然不会将所有unicode类型都转换为字符串,但这是一个垫脚石。我还尝试使用列表理解为:


for row in features:

    [i.split(',') for i in row if (type(i)==unicode and "," in i)]


收到一只叮咚
浏览 160回答 2
2回答

Smart猫小萌

您需要为每行创建一个新的列表对象,然后替换原始列表值:def row_to_values(row):    values = []    for col in row:        if isinstance(col, unicode) and col != u'f':            # split and convert all entries to float            values += (float(v) for v in col.split(','))        else:            values.append(col)    return valuesfor value in data.values():    value[:] = [row_to_values(row) for row in value]该value[:] = ...分配告诉Python来代替包含的所有指标中的列表对象具有一组新的对象。由于每个value列表都是data词典中的外部列表,因此将所有子列表替换为扩展的行。演示部分样本数据:>>> data = {"technology1": [...        [...        20, 0.02,...       u'10.00,106.10,107.00,107.00,0.45',...       u'24.00,-47.15,-49.50,-51.00,0.12',...       u'11.00,0.35,0.00,0.00,0.92',...       u'0.00',0.04,0.16, u'0.223196881092', u'f',0.02,...      ],...       [...        100, 0.02,...   u'10.00,106.10,107.00,107.00,0.45',...   u'24.00,-47.15,-49.50,-51.00,0.12',...   u'11.00,0.35,0.00,0.00,0.92', u'0.00', 0.04,...   0.16, u'0.223196881092',  u'f', 0.01...    ]],... }>>> from pprint import pprint>>> pprint(data["technology1"][0])[20, 0.02, u'10.00,106.10,107.00,107.00,0.45', u'24.00,-47.15,-49.50,-51.00,0.12', u'11.00,0.35,0.00,0.00,0.92', u'0.00', 0.04, 0.16, u'0.223196881092', u'f', 0.02]>>> pprint(row_to_values(data["technology1"][0]))[20, 0.02, 10.0, 106.1, 107.0, 107.0, 0.45, 24.0, -47.15, -49.5, -51.0, 0.12, 11.0, 0.35, 0.0, 0.0, 0.92, 0.0, 0.04, 0.16, 0.223196881092, u'f', 0.02]因此,可以通过返回新列表对象的函数调用来扩展一行,使其包含字符串中的所有浮点值。使用该函数替换所有字典值中的所有行:>>> for value in data.values():...     value[:] = [row_to_values(row) for row in value]...我们可以看到之前查看的第一行已更新:>>> pprint(data["technology1"][0])[20, 0.02, 10.0, 106.1, 107.0, 107.0, 0.45, 24.0, -47.15, -49.5, -51.0, 0.12, 11.0, 0.35, 0.0, 0.0, 0.92, 0.0, 0.04, 0.16, 0.223196881092, u'f', 0.02]字典的其余部分也是如此:>>> pprint(data){'technology1': [[20,                  0.02,                  10.0,                  106.1,                  107.0,                  107.0,                  0.45,                  24.0,                  -47.15,                  -49.5,                  -51.0,                  0.12,                  11.0,                  0.35,                  0.0,                  0.0,                  0.92,                  0.0,                  0.04,                  0.16,                  0.223196881092,                  u'f',                  0.02],                 [100,                  0.02,                  10.0,                  106.1,                  107.0,                  107.0,                  0.45,                  24.0,                  -47.15,                  -49.5,                  -51.0,                  0.12,                  11.0,                  0.35,                  0.0,                  0.0,                  0.92,                  0.0,                  0.04,                  0.16,                  0.223196881092,                  u'f',                  0.01]]}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python