Score:1

สามารถอัปเดตรายการพจนานุกรมตามเงื่อนไขที่กำหนด

ธง bz

ฉันต้องการอัปเดตรายการด้วย ansible ซึ่งมีรายการพจนานุกรมตามเงื่อนไขบางประการ

ตัวอย่างเช่น:

รายการที่ 1:
  - {"ชื่อ": "test1", "uid": 100, "gid": 250}
  - {"ชื่อ": "test2", "uid": 101, "gid": 250}
  - {"ชื่อ": "test3", "uid": 103, "gid": 250}
  - {"ชื่อ": "test4", "uid": 104, "gid": 250}

รายการ 2: [100, 101]

รายการที่ 3: [102,103]

ถ้า uid ตรงกับรายการใน list2 มันจะเปลี่ยน gid=300 และถ้าตรงกับ list3 มันจะอัพเดตเป็น 400 รายการที่เหลือจะยังคงเหมือนเดิมใน list1

โปรดแนะนำว่าฉันจะสร้าง list1 ด้วยเงื่อนไขข้างต้นได้อย่างไร

sv flag
ยินดีต้อนรับสู่ ServerFault เมื่อคำตอบมีประโยชน์ โปรดโหวตและอาจทำเครื่องหมายว่าเป็นคำตอบที่ถูกต้อง หากคำตอบนั้นช่วยแก้ปัญหาได้จริงๆ
Score:1
ธง br

ตัวอย่างเช่น

    - set_fact:
        l4: "{{ l4|d([]) + [item|combine({'gid': _gid|from_yaml})] }}"
      วนซ้ำ: "{{ list1 }}"
      วาร์:
        _gid: |
          {% ถ้า item.uid ในรายการ 2 %}
          300
          {% elif item.uid ในรายการ 3 %}
          400
          {% อื่น %}
          {{ item.gid }}
          {% เอนดิฟ %}

ให้

  l4|to_yaml: |-
    - {gid: 300, ชื่อ: test1, uid: 100}
    - {gid: 300, ชื่อ: test2, uid: 101}
    - {gid: 400, ชื่อ: test3, uid: 103}
    - {gid: 250, ชื่อ: test4, uid: 104}

อัปเดต

ไม่จำเป็นต้องวนซ้ำรายการใน Ansible 2.12 และใหม่กว่า อัปเดตรายการในไพพ์แทน นิพจน์ด้านล่างให้ผลลัพธ์เดียวกัน

dict_default: "{{ list1|items2dict(key_name='uid', value_name='gid') }}"
dict_x: "{{ dict_default|
            รวม (dict (list2 | ผลิตภัณฑ์ ([300]) + list3 | ผลิตภัณฑ์ ([400]))) }}"
gid_x: "{{ list1|map(attribute='uid')|map('extract', dict_x)|list }}"
gid_x_update: "{{ gid_x|map('community.general.dict_kv', 'gid')|list }}"
list4: "{{ list1|zip(gid_x_update)|แผนที่('รวม')|รายการ }}"
รายละเอียด
dict_default:
  100:250
  101:250
  103:250
  104:250

dict_x:
  100:300
  101:300
  102:400
  103:400
  104:250

gid_x:
  - 300
  - 300
  - 400
  - 250

gid_x_update:
  - รหัส: 300
  - รหัส: 300
  - รหัส: 400
  - รหัส: 250
Sandeep avatar
bz flag
ขอบคุณ Vladimir Botka ที่ทำงานร่วมกับโซลูชันที่มีให้

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา