在Python中循环字符串列表并以json格式生成key:pair

jgzswidk  于 2023-03-20  发布在  Python
关注(0)|答案(2)|浏览(163)

我有一个csv文件:

devid,1, devType,"type-928"
devid,2, devType,"type-930" etc.

行的长度可能不同,具体取决于包含的密钥对值的数量。但行中必须包含“devid”和“devType”。
希望将它们配对为key:value并以JSON格式进行格式化。
已从S3中以“list”形式检索到它,该列表由\r分隔的字符串组成。

Devices: ['devid,1,devType,"type-928"\r', 'devid,2,devType,"type-930"']

for device in Devices:
    device_data = device.split(',')
    print(device)

获取以,“”分隔的“字符串”形式的设备:

devid,1,devType,"type-928"
 devid,2,devType,"type-930"

按拆分(',')

device_data = device.split(',')

设备数据为:

['devid', '1', 'devType', '"oinet-928"\r'] 
   ['devid', '2', 'devType', '"oinet-930"']

等等。
由于“device_data”是一个列表,我尝试使用“zip”。

for first, second in zip(device_data, device_data[1:]):
        print(first, ":" second)

但它是配对作为第一和第二,第二和第三等如何获得第一和第二,第三和第四,直到最后。

devid : 1
1 : devType
devType : "oinet-928"
devid : 2
2 : devType
devType : "oinet-930"

最后想做一个JSON格式的文件,用Key:Value配对两个元素的字符串。例如:

{
   "data":[
        {
          "devid": 1,
          "devType": "type-928"
        },
        {
          "devid": 2,
          "devType": "type-930"
        }
   ]         
}

数据中可能有其他值,但必须有“devid”和“devType”,否则将被忽略。
另一个困惑是,如何将逗号放在“}”之后的所有块中,但最后一个除外。
任何帮助都将不胜感激。

niwlg2el

niwlg2el1#

这就解决了你的问题。

lines = [
    'devid,1,devType,"type-928"', 
    'devid,2,devType,"type-930"'
]

data = []
for line in lines:
    entries = line.strip().split(',')
    keys = entries[0::2]
    values = entries[1::2]
    data.append({key: value for key, value in zip(keys, values)})

data

其产生

[{'devid': '1', 'devType': '"type-928"'},
 {'devid': '2', 'devType': '"type-930"'}]

它的工作原理是检索列表中的每隔一个元素(::2是键)

ccrfmcuu

ccrfmcuu2#

import json
Devices = ['devid,1,devType,"type-928"\r', 'devid,2,devType,"type-930"']
result = []
for device in Devices:
    device = device.strip()
    device_data = device.split(',')
    temp_dict = { device_data[0]: int(device_data[1]), device_data[2]: str(device_data[3][1:-1])}
    result.append(temp_dict)
    
    
result_dict = { "data": result }

print(json.dumps(result_dict, indent = 1))

产出

{
 "data": [
  {
   "devid": 1,
   "devType": "type-928"
  },
  {
   "devid": 2,
   "devType": "type-930"
  }
 ]
}

相关问题