Reputation: 51
I am trying to find out ID numbers where the number of vowels in the body is an even number for the URL: https://jsonplaceholder.typicode.com/posts
My code is given below:
import json
import requests
url ='https://jsonplaceholder.typicode.com/posts'
content = requests.get(url).content
j = json.loads(content)
for each in j:
print(each['id'],each['body'])
I am now able to print the body for each user ID but unable to find out the number of vowels in the body which is an even number. Need help
Upvotes: 2
Views: 56
Reputation: 24059
You can count vowels with this code:
print(*map(each['body'].lower().count, "aeiou"))
whole code:
import json
import requests
url ='https://jsonplaceholder.typicode.com/posts'
content = requests.get(url).content
id_even = []
j = json.loads(content)
for each in j:
cnt_vwl = 0
for c in "aeiou":
cnt_vwl += each['body'].lower().count(c)
if cnt_vwl%2==0:
id_even.append(each['id'])
id_even
Output: (id that each['body'] have even vowels)
[1, 3, 4, 5, 6, 7, 10,...]
Upvotes: 3
Reputation: 261860
Here is a solution using a list comprehension and re.sub
to keep only the vowels:
import re
ids_even_vowels = [i['id']
for i in j if i['body']
if not len(re.sub('[^aeiouy]', '', i['body'], flags=re.I))%2==1
]
output:
[1, 3, 4, 5, 6, 7, 10, 12, 15, 16, 18, 20, 22, 24, 27, 31, 32, 33, 34, 35, 40, 45, 46, 48, 49, 50, 53, 55, 56, 57, 58, 61, 63, 65, 66, 67, 68, 73, 76, 78, 82, 84, 90, 92, 95, 96, 97, 99]
>>> my_string = 'AbCDefGHI'
>>> re.sub('[^aeiouy]', '', my_string, flags=re.I)
'AeI' # vowels only
>>> len(re.sub('[^aeiouy]', '', my_string, flags=re.I))
3 # number of vowels
>>> len(re.sub('[^aeiouy]', '', my_string, flags=re.I))%2
1 # remainder of division by 2: 1 is odd, 0 is even
>>> not len(re.sub('[^aeiouy]', '', my_string, flags=re.I))%2
False # is it even?
Upvotes: 1