data={usrinf:{"da":11,"ddd":12}} 对da=11的筛选计数
时间: 2023-07-05 10:20:54 浏览: 52
如果你想要对字典 `data` 中 `usrinf` 下的 `da` 等于 11 的值进行筛选计数,可以使用以下代码:
```python
data = {"usrinf": {"da": 11, "ddd": 12}}
count = 0 # 计数器
for key in data["usrinf"]:
if data["usrinf"][key] == 11:
count += 1
print(count)
```
输出结果为 `1`,因为 `usrinf` 下只有一个键值对中的 `da` 等于 11。
如果你的字典 `data` 中有多个键值对,可以使用以下代码对所有键值对中 `da` 等于 11 的值进行筛选计数:
```python
data = {"usrinf1": {"da": 11, "ddd": 12},
"usrinf2": {"da": 11, "ddd": 13},
"usrinf3": {"da": 12, "ddd": 14}}
count = 0 # 计数器
for key in data:
if "da" in data[key] and data[key]["da"] == 11:
count += 1
print(count)
```
输出结果为 `2`,因为 `usrinf1` 和 `usrinf2` 下的 `da` 都等于 11。
相关问题
data = 1 try: if data == 1: raise ZeroDivisionError except ZeroDivisionError: data = 0 else: data = 10 finally: print("Finally") print(data) 输出: 0
这段代码中,首先将变量 data 赋值为 1,然后在 try 语句中,判断如果 data 的值为 1,则触发 ZeroDivisionError 异常。在 except 语句中,将 data 的值改为 0。因此,在 finally 语句中,会输出 "Finally",并且输出 data 当前的值,即 0。
import re str = input() pattern = re.compile('\d{4}-\d{1,2}-\d{1,2}') res = pattern.findall(str) for i in res: data = i year = data[0:4] month = data[5:7] day = data[8:10] month1 = {1, 3, 5, 7, 8, 10, 12} month2 = {4, 6, 9, 11} flag = True if month in month1: if 1 <= day <= 31: flag = True else: flag = False elif month in month2: if 1 <= day <= 30: flag = True else: flag = False elif month == 2: if 1 <= day <= 28: flag = True else: flag = False if flag == True: print(data) 那为什么我这个代码实现不了以上功能啊?
你的代码实现的思路是正确的,但是有一些错误需要修正。
首先,你在使用 `findall` 函数匹配日期时,可以直接得到一个字符串列表,不需要再对每个字符串进行切片操作。
其次,在判断月份是否合法时,你使用了两个集合 `month1` 和 `month2`,但是在判断月份是否在这些集合中时,应该使用 `int(month)` 而不是 `month`。
最后,在判断日期是否合法时,应该将匹配到的日期字符串转换为整数类型,否则无法进行大小比较。
下面是修改后的代码:
```python
import re
# 读入字符串
s = input()
# 定义正则表达式
pattern = re.compile(r"\d{4}-\d{1,2}-\d{1,2}")
# 匹配字符串中的日期
res = pattern.findall(s)
# 遍历匹配到的日期列表
for data in res:
# 获取年份、月份、日期
year = int(data[0:4])
month = int(data[5:7])
day = int(data[8:10])
# 判断月份是否合法
if month in {1, 3, 5, 7, 8, 10, 12}:
if 1 <= day <= 31:
print(data)
elif month in {4, 6, 9, 11}:
if 1 <= day <= 30:
print(data)
elif month == 2:
if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
if 1 <= day <= 29:
print(data)
else:
if 1 <= day <= 28:
print(data)
```
这段代码中,我们首先读入了一个字符串 `s`,然后定义了一个正则表达式 `pattern`,用来匹配字符串中的日期。
接着,我们使用 `pattern.findall` 函数找到所有匹配的日期,得到一个字符串列表 `res`。
然后,我们遍历匹配到的日期列表 `res`,对于每个日期,我们先将年份、月份、日期分别提取出来,并将它们转换为整数类型。
接着,我们根据月份和日期的范围,判断该日期是否合法。如果合法,就输出该日期。