簡體   English   中英

如何遍歷字典列表,並打印出 Ansible 中的每個鍵和值對

[英]How to loop through a list of dictionary, and print out every key and value pair in Ansible

我在 Ansible 配置中有一個字典列表

myList
    - name: Bob
      age: 25
    - name: Alice
      age: 18
      address: USA

我把代碼寫成

- name: loop through
  debug: msg ="{{item.key}}:{{item.value}}"
  with_items: "{{ myList }}"

我想打印出來

msg: "name:Bob age:25 name:Alice age:18 address:USA"

如何遍歷此字典並獲取鍵值對? 因為它不知道什么是關鍵。 如果我更改為 {{ item.name }},ansible 將起作用,但我也想知道 key

如果要遍歷列表並分別解析每個項目:

- debug: msg="{{ item | dictsort | map('join',':') | join(' ') }}"
  with_items: "{{ myList }}"

將打印:

"msg": "age:25 name:Bob"
"msg": "address:USA age:18 name:Alice"

如果要將所有內容合並為一行,請使用:

- debug: msg="{{ myList | map('dictsort') | sum(start=[]) | map('join',':') | join(' ') }}"

這將給出:

"msg": "age:25 name:Bob address:USA age:18 name:Alice"

請記住,dicts 不在 Python 中排序,因此您通常不能期望您的項目與 yaml 文件中的順序相同。 在我的示例中,它們在 dictsort 過濾器之后按鍵名排序。

這是您的文本:myList - 姓名:鮑勃年齡:25 - 姓名:愛麗絲年齡:18 地址:美國

這是答案:

text='''myList - 姓名:鮑勃年齡:25 - 姓名:愛麗絲年齡:18 地址:美國'''

>>> final_text=''

對於 text.split('\\n') 中的行: line1=line.replace(' ','').replace('-','') 如果 'myList' 不在 line1 中: final_text+=line1+' '

final_text '姓名:鮑勃年齡:25 姓名:愛麗絲年齡:18 地址:美國'

class Person(object):
  def __init__(self, name, age, address):
    self.name = name
    self.age = age
    self.address = address

  def __str__(self):
    # String Representation of your Data.
    return "name:%s age:%d address:%s" % (self.name, self.age, self.address)

然后你可以有一個你創建的對象列表。 我在這里使用一些示例數據來創建一個字典列表。

dict={"name":"Hello World", "age":23, "address":"Test address"}
myList = [dict,dict,dict]
objList = []
for row in myList:
  objList.append(str(Person(**row)))

result = ' '.join(objList)
print(result)

最終打印:姓名:Hello World 年齡:23​​ 地址:測試地址名稱:Hello World 年齡:23​​ 地址:測試地址名稱:Hello World 年齡:23​​ 地址:測試地址

我打算做 REPR,但它的使用方式有點不同,我認為這可能更適合您的需求。

如果你想保持它非常簡單,你可以這樣做:

dict={"name":"Hello World", "age":23, "address":"Test address"}
myList = [dict,dict,dict]
objList = []
for row in myList;
  tmp = []
  for k in row:
    tmp.append("%s:%s" % (k, row[k]))
  objList.append(" ".join(tmp))
print(" ".join(objList))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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