[英]How to create a dictionary by iterating over a list, with same key multiple values?
我有df
命令的輸出來檢查我的文件系統。 我從 os.command 得到它,然后將它添加到列表中。 現在我正在逐行實現並希望創建一個字典,因為我需要稍后將響應作為 json 發送。
Filesystem Size Used Avail Use% Mounted on
/dev/xxxx/yyy 9.8G 3.2G 6.1G 35% /
tmpfs 32G 0 32G 0% /dev/shm
/dev/sss 247M 106M 129M 46% /boot
/dev/aaa/ccc 1.5G 205M 1.2G 15% /home
/dev/bbb/ddd 2.2G 152M 2.0G 8% /opt
我想要的是:
{
Filesystem:/dev/xxxx/yyy
{
Size: 9.8G
Used:
Avail:
Use%:
Mounted on:
}
Filesystem:tmpfs
{
Size:
Used:
Avail:
Use%:
Mounted on:
}
Filesystem:/dev/sss
{
Size:
Used:
Avail:
Use%:
Mounted on:
}
}
我現在的代碼是:
output = os.popen('df -Ph')
df_contents=output.readlines()
for line in df_contents:
print(line)
我想了解這是否可行,因為我有具有不同值的相同鍵,如果是,那么在 python 中執行此操作的最佳方法是什么?
要回答您的問題,不,您不能在同一詞典中具有相同名稱的不同鍵。 但是,如果您無論如何都按FileSystem
對所有內容進行分組,則您可以將字典的鍵作為FileSystem
的值本身,在這種情況下,您的字典將如下所示:
{ '/dev/xxxx/yyy': {'Size': '9.8G', 'Used': '3.2G', ... }
'tmpfs: {'Size': '32G', 'Used': '0', ... }
... and so on.
}
假設df_contents
中的每一行都有由空格(不一定是制表符)分隔的數據,並且任何值本身都沒有空格,那么您可以使用.split()
來分割每一行。
var_keys = ['Size', 'Used', 'Avail', 'Use%', 'Mounted on']
mydict = {}
for line in df_contents:
# This next command breaks the line into a list,
# like ['/dev/xxxx/yyy', '9.8G', '3.2G', '6.1G', '35%', '/']
values = line.split()
mydict[values[0]] = dict(zip(var_keys, values[1:]))
將是非常接近這個的東西:
headers = [
'Size',
'Used',
'Avail',
'Use%',
'Mounted',
]
lines = [line.strip().split() for line in df_contents if line.strip()]
{line[0]: dict(zip(headers, line[1:])) for line in lines}
也許你可以使用 compat 和 df.to_json
import pandas as pd
from pandas.compat import StringIO
df_contents = pd.read_csv(StringIO(output.read()), sep = '\t')
df_contents.to_json(orient='table')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.