我有疑问要比较两个字典之间的价值。我在两个字典上都与“ jarname”“ jarverion”进行比较。如果相同,如果版本不同,则需要在dict1部分更新为“ true”。我需要在dict1.Overwrite部分将false设置为
dict2={'partname1': { 'jarversion':'1.0','jarname':'jar1.jar'},'partname2': { 'jarversion':'2.0','jarname':'jar2.jar'},'partname3': {'jarversion': '3.0','jarname':'jar3.jar'}}
dict1={1:{'partition_name' : 'avs', 'jar':[{'jarversion':'1.0','jarname':'jar1.jar'},{'jarversion':'5.0','jarname':'jar5.jar'}]},2:{'partition_name' : 'ivs', 'jar':[{'jarversion':'4.0','jarname':'jar4.jar'},{'jarversion':'2.0','jarname':'jar2.jar'}],}}
我使用下面的代码将dict1“ jarverion”“ jarname”与dict2 dict进行比较。
res=[]
for _, v in dict2.items():
res.append(v['jarname'] + v['jarversion'])
def cmp_value( rstring='',lstring=''):
print('rstring',rstring)
print('lstring',lstring)
if rstring == lstring:
return True
else:
return False
for key, val in dict1.items():
print(val)
for eachval in res:
if cmp_value(eachval, "%s%s"%(val['jarname'], val['jarversion'])):
dict1[key].update({"overwrite": "true"})
break
else:
dict1[key].update({"overwrite": "false"})
print (dict1)
但是此代码不起作用,我正在得到
if cmp_value(eachval, "%s%s"%(val['jarname'], val['jarversion'])):
KeyError: 'jarname'
任何人都可以在这里帮助我。
答案 0 :(得分:0)
dict2 = {'partname1': {'jarversion': '1.0', 'jarname': 'jar1.jar'},
'partname2': {'jarversion': '2.0', 'jarname': 'jar2.jar'},
'partname3': {'jarversion': '3.0', 'jarname': 'jar3.jar'}}
dict1 = {1: {'partition_name': 'avs',
'jar': [{'jarversion': '1.0', 'jarname': 'jar1.jar'}, {'jarversion': '5.0', 'jarname': 'jar5.jar'}]},
2: {'partition_name': 'ivs',
'jar': [{'jarversion': '4.0', 'jarname': 'jar4.jar'}, {'jarversion': '2.0', 'jarname': 'jar2.jar'}], }}
res = []
for _, v in dict2.items():
res.append(v['jarname'] + v['jarversion'])
def cmp_value(rstring='', lstring=''):
# print('rstring', rstring)
# print('lstring', lstring)
if rstring == lstring:
return True
else:
return False
for key, val in dict1.items():
for eachval in res:
for i in val['jar']:
if cmp_value(eachval, "%s%s" % (i['jarname'], i['jarversion'])):
i['overwrite'] = 'true'
break
else:
if 'overwrite' not in i:
i['overwrite'] = 'false'
print(dict1)
输出:{1:{'partition_name':'avs','jar':[{'jarversion':'1.0','jarname':'jar1.jar','overwrite':'true'}, {'jarversion':'5.0','jarname':'jar5.jar','overwrite':'false'}]}},2:{'partition_name':'ivs','jar':[{'jarversion' :'4.0','jarname':'jar4.jar','overwrite':'false'},{'jarversion':'2.0','jarname':'jar2.jar','overwrite':'true' }]}}
答案 1 :(得分:0)
class Contract
{
public Contract()
{
}
public string ContractID;
public string Type;
public string Trader;
public DateTime EntryDate;
public string BuyerCo;
public string SellerCo;
public string BuyerTrader;
public string SellerTrader;
public List<ProductDetail> Details = new List<ProductDetail>();
public class ProductDetail
{
public ProductDetail()
{
}
public string Product;
public DateTime StartDate;
public DateTime EndDate;
public string Rin;
public string Qunatity;
public string DeliveryLocation;
public string State;
public string DeliveryMethod;
public string Terms;
public string Price;
public string Notes;
internal string Matches;
}
}
行遍历键(整数)和值(字典)的元组。
在产生错误的行中,在for key, val in dict1.items()
的情况下,key=1
的内容如下:
val
您正在要求此字典返回与键{
'partition_name' : 'avs',
'jar': [
{'jarversion': '1.0', 'jarname': 'jar1.jar'},
{'jarversion':'5.0','jarname':'jar5.jar'}
]
}
相关的值。由于字典没有该键,因此会引发错误。如上所示,jarname
的唯一有效键是val
和partition_name
。