如何按字典中的优先顺序更新字符串

huangapple go评论97阅读模式
英文:

How to update the string with priority order in the dictionary

问题

  1. data = [
  2. {'Pencil': 'Green'},
  3. {'Pen': 'N/A'},
  4. {'Scale': 'Red'},
  5. {'Compass': 'N/A'}
  6. ]
  7. priority_order = {'Red': 4, 'Orange': 3, 'Yellow': 2, 'Green': 1, 'Undefined': 0}
  8. main = 'Undefined'
  9. for each in data:
  10. for k, v in each.items():
  11. if priority_order[v] > priority_order[main]:
  12. main = v
英文:

I have list of dict below

  1. data =
  2. [ { 'Pencil': 'Green' }, { 'Pen': 'N/A' }, { 'Scale': 'Red' }, { 'Compass': 'N/A'}]

My priority order is below

  1. priority_order = {'Red':4, 'Orange':3, 'Yellow':2, 'Green':1, 'Undefined': 0}

I have main variable which has to update with in priority order of values in data list of dictionary, by default main is

  1. main = 'Undefined'

Code is below

  1. for each in data:
  2. for k,v in each.items():
  3. if priority_order[v] > priority_order[main]:
  4. main = priority_order[v]

I am getting key error for this

My expected out is 'Red' as scale is having 'Red'

答案1

得分: 3

  1. data = [{'Pencil': '绿色'}, {'Pen': 'N/A'}, {'Scale': '红色'}, {'Compass': 'N/A'}]
  2. priority_order = {'红色': 4, '橙色': 3, '黄色': 2, '绿色': 1, 'N/A': 0}
  3. main = 'N/A'
  4. for each in data:
  5. for k, v in each.items():
  6. if priority_order[v] > priority_order[main]:
  7. main = v
  8. print(main)
英文:
  1. data =[ { 'Pencil': 'Green' }, { 'Pen': 'N/A' }, { 'Scale': 'Red' }, { 'Compass': 'N/A'}]
  2. priority_order = {'Red':4, 'Orange':3, 'Yellow':2, 'Green':1, 'N/A': 0}
  3. main = 'N/A'
  4. for each in data:
  5. for k,v in each.items():
  6. if priority_order[v] > priority_order[main]:
  7. main = v
  8. print(main)

答案2

得分: 0

  1. for each in data:
  2. for k, v in each.items():
  3. if v in priority_order:
  4. if priority_order[v] > priority_order[main]:
  5. main = v
英文:
  1. for each in data:
  2. for k, v in each.items():
  3. if v in priority_order:
  4. if priority_order[v] > priority_order[main]:
  5. main = v

This should do the trick.

答案3

得分: 0

你可以使用一个简单的 max() 调用来实现这个功能:

  1. data =[ { 'Pencil': 'Green' }, { 'Pen': 'N/A' }, { 'Scale': 'Red' }, { 'Compass': 'N/A'}]
  2. priority_order = {'Red':4, 'Orange':3, 'Yellow':2, 'Green':1, 'N/A': 0}
  3. print(max((v for each in data for v in each.values()), key=priority_order.get))

输出结果为:

  1. Red

如果你希望它能处理不在 priority_order 中的值,可以指定一个提供默认优先级的 key(因为默认值 None 在与整数比较时会引发 TypeError):

  1. print(max(
  2. (v for each in data for v in each.values()),
  3. key=lambda v: priority_order.get(v, 0)
  4. ))
英文:

You can do this with a simple max() call:

  1. data =[ { 'Pencil': 'Green' }, { 'Pen': 'N/A' }, { 'Scale': 'Red' }, { 'Compass': 'N/A'}]
  2. priority_order = {'Red':4, 'Orange':3, 'Yellow':2, 'Green':1, 'N/A': 0}
  3. print(max((v for each in data for v in each.values()), key=priority_order.get))

prints:

  1. Red

If you want it to be able to handle values that aren't in priority_order, specify a key that supplies a default priority (since the default None will raise a TypeError on comparisons with ints):

  1. print(max(
  2. (v for each in data for v in each.values()),
  3. key=lambda v: priority_order.get(v, 0)
  4. ))

huangapple
  • 本文由 发表于 2023年3月7日 11:15:32
  • 转载请务必保留本文链接:https://go.coder-hub.com/75657731.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定