[英]How do I change a list of lists to key, value?
我想這樣轉換數據:csv中的第一行是鍵,以下行是值。 我怎樣才能做到這一點?
所以我希望鍵是'SkuPartNumber','ActiveUnits','ConsumedUnits',值是它下面的行。
目標是我可以按照下面的方式查詢記錄並將值存儲在其他位置。
for i in records:
...
results.append((i['SkuPartNumber'],i['ActiveUnits'],i['ConsumedUnits'])
碼:
>>>cmd = ['C:\\WINDOWS\\system32\\WindowsPowerShell\\v1.0\\powershell.exe', 'script.ps1']
>>>subprocess.call(cmd)
>>> with open ('sku.csv', 'r') as sku:
... reader = csv.reader(sku)
... records = list(reader)
...
>>> type(records)
<class 'list'>
>>> pprint(records)
[['SkuPartNumber', 'ActiveUnits', 'ConsumedUnits'],
['EXCHANGESTANDARD', '1', '1'],
['O365_BUSINESS_PREMIUM', '4', '4']]
>>>
感謝一些幫助。
預期結果:
[{
"SkuPartNumber": "EXCHANGESTANDARD",
"ActiveUnits": 1,
"ConsumedUnits": 1
}, {
"SkuPartNumber": "O365_Business_Premium",
"ActiveUnits": 4,
"ConsumedUnits": 4
}]
我不知道為什么你把subprocesses,powershell和其他主題帶到這里,但你需要的是來自csv
模塊的DictReader
。
>>> from csv import DictReader
>>> filedata = '''SkuPartNumber,ActiveUnits,ConsumedUnits
... EXCHANGESTANDARD,1,1
... O365_BUSINESS_PREMIUM,4,4
... '''
>>> list(DictReader(filedata.splitlines()))
[{'ActiveUnits': '1', 'ConsumedUnits': '1', 'SkuPartNumber': 'EXCHANGESTANDARD'}, {'ActiveUnits': '4', 'ConsumedUnits': '4', 'SkuPartNumber': 'O365_BUSINESS_PREMIUM'}]
在您的實際代碼中,只需使用list(DictReader(f))
,其中f
是打開文件的名稱。
records = [['SkuPartNumber', 'ActiveUnits', 'ConsumedUnits'],
['EXCHANGESTANDARD', '1', '1'],
['O365_BUSINESS_PREMIUM', '4', '4']]
recorddictlist = [dict(SkuPartNumber=r[0],
ActiveUnits=r[1],
ConsumedUnits=r[2]) for r in records[1:]]
print(recorddictlist)
這不是最靈活的,但假設您的子進程的輸出是穩定的,我發現它最容易閱讀。
否則,您可以在注釋中使用csv.DictReader
。
# new empty list of records in new format
transformed_records = []
# iterate over records, skipping the first list which is key names
for values in records[1:]:
# fresh dict to hold this row
newdict = {}
# iterate over each value
for position,value in enumerate(values):
# fetch key name from first list in records
key = records[0][position]
newdict[key] = value
# add dict to the list
transformed_records.append(newdict)
我能想到的最簡單的方法:
from pprint import pprint
records = [['SkuPartNumber', 'ActiveUnits', 'ConsumedUnits'],
['EXCHANGESTANDARD', '1', '1'],
['O365_BUSINESS_PREMIUM', '4', '4']]
fields = records[0]
result = [dict(zip(fields, record)) for record in records[1:]]
pprint(result)
輸出:
[{'ActiveUnits': '1',
'ConsumedUnits': '1',
'SkuPartNumber': 'EXCHANGESTANDARD'},
{'ActiveUnits': '4',
'ConsumedUnits': '4',
'SkuPartNumber': 'O365_BUSINESS_PREMIUM'}]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.