簡體   English   中英

如何通過迭代具有相同鍵多個值的列表來創建字典?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM