Mik*_*ann 2 python dictionary python-2.7
我是python的新手,我使用的是python 2.7.我有两个具有相同键的字典.一本字典总是一样的.另一个可能没有第一个字典中的所有匹配键.我已经根据本主题的Stack overflow中的其他问题尝试了很多变体.
我甚至尝试使用以下代码进行测试.无效的部分是比较不同词典中的键.样本字典:
clubDict = {'001':'Alabama','066':'MountainWest','602':'The Auto Club Group'}
data = {'001':6021, ,'066':1134}
Run Code Online (Sandbox Code Playgroud)
如您所见,数据字典中没有键602.数据字典正在这个代码中由csv文件构建,该文件可以为总数添加多个数字.大部分代码都是在堆栈溢出中回答的.
代码工作时,我没有if,elifs.但是,print语句在打印时会产生不同的结果.这是对数据{}中缺少键的做法.我添加了一个if,else尝试使用pass来比较密钥.仍然不会比较.所以我试过你现在看到的.
这是我的代码的一部分:
def getTotals():
result = defaultdict(int)
regexp = re.compile(r'(?:ttp_ws_sm|ttpv1)_(\d+)_')
with open(os.path.join(source, 'ttp_13_08.csv'), 'r') as f:
rows = csv.reader(f)
#adds total values for each club code (from csv file)
for row in rows:
match = regexp.search(row[1])
if match:
result[match.group(1)] += int(row[13])
for key, value in result.items():
data.update(result.items())
for value, key in clubDict.items():
#f = open(output_path + filename, 'a')
shared_keys = set(clubDict.keys()).union(data.keys())
if key not in data:
print "No counts avialable"
elif key not in clubDict:
print "Check for Club code"
elif data[key] == clubDict[key]:
print 'match'#, '{0}, {1}, {2}'.format(key, value, data[value])
else:
print '{0}, {1}, {2}'.format(key, value, data[value])
file.close
def main():
try:
getTotals()
except:
print "No more results"
Run Code Online (Sandbox Code Playgroud)
结果不是我需要的.
这是期望的结果:
Alabama 001 6021
MountainWest 066 1134.
Run Code Online (Sandbox Code Playgroud)
我已经回顾了堆栈溢出中的许多q/a,似乎无法获得这些结果.我可能只是在我的问题上搜索错误.
你在循环中交换了value
和key
:
for value, key in clubDict.items():
Run Code Online (Sandbox Code Playgroud)
.items()
给你(key, value)
元组.
稍微重新编写代码以删除冗余:
def getTotals():
result = defaultdict(int)
regexp = re.compile(r'(?:ttp_ws_sm|ttpv1)_(\d+)_')
with open(os.path.join(source, 'ttp_13_08.csv'), 'r') as f:
rows = csv.reader(f)
#adds total values for each club code (from csv file)
for row in rows:
match = regexp.search(row[1])
if match:
result[match.group(1)] += int(row[13])
data.update(result)
for key in clubDict.viewkeys() & data:
club_value, data_value = clubDict[key], data[key]
if club_value == data_value:
print 'match'
else:
print '{0}, {1}, {2}'.format(key, club_value, data_value)
Run Code Online (Sandbox Code Playgroud)
您已经计算了两个词典的交集,它为您提供了仅存在于两者中的键,但您确实需要遍历该交集本身,而不是clubDict
.
我曾经dict.viewkeys()
直接得到一个类似于集合的对象,它可以与另一个可迭代的对象(如data
字典)非常有效地交叉,没有中间结果.
归档时间: |
|
查看次数: |
107 次 |
最近记录: |