import collections
header_dict = {'account number':'ACCOUNT_name','accountID':'ACCOUNT_name','name':'client','first name':'client','tax id':'tin'}
#header_dict = collections.defaultdict(lambda: 'tin') # attempted use of defaultdict...destroys my dictionary
given_header = ['account number','name','tax id']#,'tax identification number']#,'social security number'
#given_header = ['account number','name','tax identification number']...non working header layout
fileLayout = [header_dict[ting] for ting in given_header if ting] #create if else..if ting exists, add to list...else if not in list, add to dictionary
def getLayout(ting):
global given_header
global fileLayout
return given_header[fileLayout.index(ting)]
print getLayout('ACCOUNT_name')
print getLayout('client')
print getLayout('tin')
rows = zip((getLayout('ACCOUNT_name'),getLayout('client'),getLayout('tin')))
print rows
我正在处理许多随机,混合布局/列顺序的文件。我有一个我的db表'ACCOUNT_name','client','tin'的设置模板,我想要订购文件。我已经创建了一个字典,列出了我可能在其他文件中找到的可能的标题/列名称键和我设置的标题名称作为值。因此,例如,如果我想查看从我的某个给定文件中放置“帐号”列的位置,我会输入header_dict ['帐号']。 这将从我的模板“ACCOUNT_name”中获取相应的列。这很有效......我还添加了另一个功能。而不是必须键入“帐号”..我做了一个列表理解,按键查找每个值。
我刚刚使用'fileLayout'列表理解创建的这个列表实际上将我给定文件的标题转换为我想要的名称:['ACCOUNT_name','client']
这让生活变得更轻松......我知道我想查找'ACCOUNT_name'或'客户'。接下来我运行一个函数'getLayout',它返回我正在搜索的所需列的索引...所以,如果我想查看我想要的列'ACCOUNT_name'在文件中的位置,我只是运行这样调用的函数......
getLayout('ACCOUNT_name')
现在,我可以轻松地将列打印到我的订单中......用:
rows = zip((getLayout('ACCOUNT_name'),getLayout('client'),getLayout('tin')))
print rows
上面的代码给了我[('account number'),('name'),('tax id')]
,这正是我想要的......
但是如果有一个新标题我不习惯怎么办?让我们使用上面相同的示例代码,但将列表'given_header'更改为:
given_header = ['account number','name','tax identification number']
我肯定得到了关键错误,KeyError:'税号识别号'我知道我可以使用defaultdict但是当我尝试使用它设置值'tin'时,我最终会覆盖整个字典...我最终还是愿意这样做......
我想在列表解析中创建一个else,它允许我标准输入字典条目(如果它们不存在)。换句话说,由于“税号识别号码”不作为键存在,因此将其作为一个键添加到我的dict中,并通过raw_input为其赋予值“tin”。有没有人做过或尝试过这样的事情?有任何想法吗?如果您有任何建议,我会全力以赴。我在这个问题上挣扎......
我想要解决这个问题的方法是列表理解。
fileLayout = [header_dict[ting] for ting in given_header if ting else raw_input('add missing key value pair to dictionary')] # or do something of the sort.