我有一个类似的字典:
myDict.items()
('RI.16498.172.249.dcm',
'~/pythonTests/20130206162339/1CW/20-03-13'),
('RI.134.45.dcm',
'~/pythonTests/20130206162339/2CCW/18-02-13'),
('RI.16671.160.134.dcm',
'~/pythonTests/20130206162339/1CW/20-02-13')]
.....
表示文件及其位置。有共享该位置的文件,我需要能够提取该信息。例如,我想知道日期"1CW"
上有多少文件属于"20-03-13"
(参见我字典的第一个元素)
我尝试过Counter
:
counts = Counter((k[1], v) for k, v in myDict.items())
counts
Counter({('I', '~/pythonTests/20130206162339/1CW/20-02-13'): 47, ('I', '~/pythonTests/1.2.246.352.71.5.22453062.437221.20130206162339/1CW/18-02-13'): 52, ......
但我仍然看不到我可以查询我想要的信息的方式。知道如何做到这一点吗?
我的目标是获得给定日期(20-03-13)和字段(1CW或2CCW)的出现次数:
Num = getValues("1CW","20-03-13")
答案 0 :(得分:2)
a = [i.split('/') for i in d.itervalues()]
c = [i.count('1CW') for i in a if i[4] == '20-02-12']
这将实际上是你想要的。
s = []
for i in d.itervalues():
s.append(i.split('/'))
print s
for i in s:
if i[4] == '20-02-13':
print i.count('1CW')
最简单的方法。
答案 1 :(得分:1)
如果您的目标只是获取每个路径出现的次数,那么您必须
counts = Counter(v for k, v in myDict.items())
正如您在此处所看到的,您没有正确使用'for'命令;当您使用'for'迭代字典上的项时,第一个变量(在本例中为'k')对应于字典中的键(在您的示例中为文件名),而第二个变量('v' ')对应于值(文件的路径)。在你的代码中,你正在做k [1]这不是你想要的,因为它只是取文件名上的第二个字符,把k作为一个字符数组,这就是为什么你得到这个奇怪在Counter对象上'我'字符。
通过将for循环的结果更改为仅值('v'),您将初始化Counter以对路径而不是名称进行操作。
编辑:正如您所说,您的目标是拥有一个取决于日期和前缀的功能,我建议您使用以下解决方案:def compute(dict, prefix, date):
counts = Counter((v.split('/')[3], v.split('/')[4]) for v in dict.values()])
return counts.get((prefix, date))
请注意元组周围的括号;如果你不放它们,Counter
的构造函数会认为这是两个不同的参数而不是元组。
之后,您只需要使用相应的参数调用该函数:
res = compute(myDict, "1CW", "20-03-13")