这是我的代码:
我正在尝试使用以下代码将数据插入字典数组中,但无法正确插入。
代码:
test_list = {'module_serial-1': 'PSUXA12345680', 'module_name-1': 'CH1.FM5', 'module_name-2': 'CH1.FM6', 'module_serial-2': 'PSUXA12345681'}
def parse_subdevice_modules(row):
modules = []
module = {}
for k, v in row.items():
if v:
if re.match("module_name", k):
module['name'] = v
if re.match("module_serial", k):
module['serial'] = v
modules.append(module)
module = {}
return modules
print(parse_subdevice_modules(test_list))
预期输出: [{'name':'CH1.FM5',serial':'PSUXA12345680'},{'name':'CH1.FM6','serial':'PSUXA12345681'}] 实际输出: ['serial':'PSUXA12345680'},{'name':'CH1.FM6','serial':'PSUXA12345681'}]
在这里运行:https://repl.it/repls/WetSteelblueRange
请注意,由于通过外部API来更改数据test_list的顺序,因此我使用了regex。任何想法将不胜感激。
答案 0 :(得分:1)
您的代码基于错误的假设,即密钥是有序的,并且序列将始终跟随该名称。此处合适的解决方案是使用dict(实际上是collections.defaultdict
使事情变得容易)基于模块号(键中的最后一个“ -N”)来收集和重新组合您感兴趣的值。请注意,您在这里不需要正则表达式-Python字符串已经为该任务提供了必要的操作:
from collections import defaultdict
def parse_subdevice_modules(row):
modules = defaultdict(dict)
for k, v in row.items():
# first get rid of what we're not interested in
if not v:
continue
if not k.startswith("module_"):
continue
# retrieve the key number (last char) with
# negative string indexing:
key_num = k[-1]
# retrieve the useful part of the key ("name" or "serial")
# by splitting the string:
key_name = k.split("_")[1].split("-")[0]
# and now we just have to store this in our defaultdict
modules[key_num][key_name] = v
# and return only the values.
# NB: in py2.x you don't need the call to `list`,
# you can just return `modules.values()` directly
modules = list(modules.values())
return modules
test_list = {
'profile': '', 'chassis_name': '123', 'supplier_order_num': '',
'device_type': 'mass_storage', 'device_subtype': 'flashblade',
'module_serial-1': 'PSUXA12345680', 'module_name-1': 'CH1.FM5',
'module_name-2': 'CH1.FM6', 'rack_total_pos': '',
'asset_tag': '002000027493', 'module_serial-2': 'PSUXA12345681',
'purchase_order': '0004530869', 'build': 'Test_Build_for_SNOW',
'po_line_num': '00190', 'mac_address': '', 'position': '7',
'model': 'FB-528TB-10X52.8TB', 'manufacturer': 'PureStorage',
'rack': 'Test_Rack_2', 'serial': 'PMPAM1842147D', 'name': 'FB02'
}
print(parse_subdevice_modules(test_list))
答案 1 :(得分:1)
您也可以这样做。
test_list = {'module_serial-1': 'PSUXA12345680', 'module_name-1': 'CH1.FM5', 'module_name-2': 'CH1.FM6',
'module_serial-2': 'PSUXA12345681'}
def parse_subdevice_modules(row):
modules_list = []
for key, value in row.items():
if not value or key.startswith('module_name'):
continue
if key.startswith('module_serial'):
module_name_key = f'module_name-{key.split("-")[-1]}'
modules_list.append({'serial': value, 'name': row[module_name_key]})
return modules_list
print(parse_subdevice_modules(test_list))
输出:
[{'serial': 'PSUXA12345680', 'name': 'CH1.FM5'}, {'serial': 'PSUXA12345681', 'name': 'CH1.FM6'}]
答案 2 :(得分:0)
您需要检查var pasuxebi = document.querySelectorAll('.pasuxebi');
var checkBtn = document.querySelector('.check');
var nextBtn = document.querySelector('.next');
var startBtn = document.querySelector('.start');
var kitxva = document.querySelector('h3');
var pasuxebiBox = document.querySelector('.pasuxebi');
是否包含2个元素并将其附加到模块:
<div class="box">
<h3 class="none">Question</h3>
<div class="pasuxebi none">
<div class="pasuxi">pirveli</div>
<div class="pasuxi">pirveli</div>
<div class="pasuxi">pirveli</div>
<div class="pasuxi">pirveli</div>
</div>
<div class="buttons">
<div class="start">Start</div>
<div class="check none">Check</div>
<div class="next none">Next</div>
</div>
返回:
module