为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

收到一只叮咚 2021-04-29 13:12:36
所以我的数据看起来像这样: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.02100, 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)]
查看完整描述

2 回答

?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

您需要为每行创建一个新的列表对象,然后替换原始列表值:


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 values


for 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]]}


查看完整回答
反对 回复 2021-05-11
  • 2 回答
  • 0 关注
  • 159 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信