0

I have the response message below and code which I follow

result= a["{\"msg\":\"result\",\"id\”:\”test\”,\”result\":{\"categories\":[\"<20M\",\"20M+\",\"50M+\",\"300M+\",\"1G\"],\"series\":[{\"name\":\"Fiber\",\"data\":[216,41,10393,37394,6016]}],\"totals\":{\"<20M\":216,\"20M+\":41,\"50M+\":10393,\"300M+\":37394,\"1G\":6016}}}"]

#Remove a
     sliceresult=result[1:]
    print('Result After slice: {}'.format(sliceresult))
    string_input = ''.join(str(s) for s in sliceresult)
    print(string_input)
    category = json.loads(string_input)['result']['categories']
    series = json.loads(string_input)['result']['series']
    total = json.loads(string_input)['result']['totals']
    print(category, series, total)
    Error Response was:
        category = json.loads(result[1:])['result']['categories']
    TypeError: list indices must be integers, not str
2

2 Answers 2

1

This might help you to begin with:

 a = ["{\"msg\":\"result\",\"id\":\"test\",\"result\":{\"categories\":[\"<20M\",\"20M+\",\"50M+\",\"300M+\",\"1G\"],\"series\":[{\"name\":\"Fiber\",\"data\":[216,41,10393,37394,6016]}],\"totals\":{\"<20M\":216,\"20M+\":41,\"50M+\":10393,\"300M+\":37394,\"1G\":6016}}}"]

string_input = ''.join(str(s) for s in a)
print(string_input)

    category = json.loads(string_input)['result']['categories']
    series = json.loads(string_input)['result']['series']
    total = json.loads(string_input)['result']['totals']
    print(category, series, total)

Also be careful, your input string is not properly formatted. it should be " not

Sign up to request clarification or add additional context in comments.

7 Comments

this one works fine but how should I remove '[ ]' square brackets in the response
then in your case it's not json , it's a list. I have modified my answers, that will definitely help.
# Removing a from the string sliceresult=result[1:] print('Result After slice: {}'.format(sliceresult)) string_input = ''.join(str(s) for s in sliceresult) print(string_input) category = json.loads(string_input)['result']['categories'] series = json.loads(string_input)['result']['series'] total = json.loads(string_input)['result']['totals'] print(category, series, total)
I followed this code and got an error was category = json.loads(string_input)['result']['categories'] TypeError: list indices must be integers, not str
I edited latest code, could u please review it because in my response 'a' also included
|
0
import json
from collections import Counter
from typing import Dict, Tuple, List, Counter as CounterType

def calculate_user_activity(data: Dict) -> CounterType:
    return Counter(action['user'] for action in data['activities'])

def get_most_active_user(user_activity: CounterType) -> Dict:
    most_active_user = user_activity.most_common(1)[0]
    return {
        'name': most_active_user[0],
        'action_count': most_active_user[1]
    }

def get_user_activity_percentage(user_activity: CounterType) -> float:
    total_actions = sum(user_activity.values())
    most_active_user = user_activity.most_common(1)[0]
    return round((most_active_user[1] / total_actions) * 100, 2)

def get_total_actions(user_activity: CounterType) -> int:
    return sum(user_activity.values())

def get_unique_users_count(user_activity: CounterType) -> int:
    return len(user_activity)

def get_all_users_ranked(user_activity: CounterType) -> List[Tuple[str, int]]:
    return user_activity.most_common()

def get_average_actions_per_user(user_activity: CounterType) -> float:
    total_actions = sum(user_activity.values())
    unique_users = len(user_activity)
    return round(total_actions / unique_users, 2)

def get_median_actions_per_user(user_activity: CounterType) -> int:
    actions_per_user = sorted(user_activity.values())
    length = len(actions_per_user)
    
    if length % 2 == 0:
        middle1 = actions_per_user[length // 2 - 1]
        middle2 = actions_per_user[length // 2]
        return (middle1 + middle2) // 2
    else:
        return actions_per_user[length // 2]

def analyze_user_data(file_path: str) -> Dict:
    try:
        with open(file_path, 'r') as file:
            data = json.load(file)
            
        user_activity = calculate_user_activity(data)
        
        return {
            'most_active_user': get_most_active_user(user_activity),
            'most_active_user_percentage': get_user_activity_percentage(user_activity),
            'total_actions': get_total_actions(user_activity),
            'unique_users': get_unique_users_count(user_activity),
            'all_users_ranked': get_all_users_ranked(user_activity),
            'average_actions_per_user': get_average_actions_per_user(user_activity),
            'median_actions_per_user': get_median_actions_per_user(user_activity)
        }
        
    except FileNotFoundError:
        return "Error: File not found"
    except json.JSONDecodeError:
        return "Error: Invalid JSON format"
    except Exception as e:
        return f"Error: {str(e)}"

# Example usage with sample data
if __name__ == "__main__":
    # Create sample data with many records
    sample_data = {
        "activities": [
            {"user": "alice", "type": "login", "message": "bla bla bla"},
            {"user": "yossi", "type": "login", "message": "bla bla bla"},
            {"user": "alice", "type": "login", "message": "bla bla bla"},
            {"user": "tal", "type": "login", "message": "bla bla bla"},
            {"user": "tossi", "type": "login", "message": "bla bla bla"},
            {"user": "alice", "type": "login", "message": "bla bla bla"},
            {"user": "gal", "type": "login", "message": "bla bla bla"},
            {"user": "alice", "type": "login", "message": "bla bla bla"},
            {"user": "yossi", "type": "login", "message": "bla bla bla"},
            {"user": "alice", "type": "login", "message": "bla bla bla"},
            {"user": "tal", "type": "login", "message": "bla bla bla"},
            {"user": "alice", "type": "login", "message": "bla bla bla"},
            {"user": "gal", "type": "login", "message": "bla bla bla"},
            {"user": "tossi", "type": "login", "message": "bla bla bla"},
            {"user": "alice", "type": "login", "message": "bla bla bla"},
        ]
    }
    
    # Save sample data to a JSON file
    with open('sample_user_data.json', 'w') as f:
        json.dump(sample_data, f, indent=2)
    
    # Analyze the data
    results = analyze_user_data('sample_user_data.json')
    
    # Print results
    print("\nAnalysis Results:")
    print("-" * 50)
    print(f"Most active user: {results['most_active_user']['name']}")
    print(f"Number of actions: {results['most_active_user']['action_count']}")
    print(f"Percentage of total activity: {results['most_active_user_percentage']}%")
    print(f"Total number of actions: {results['total_actions']}")
    print(f"Number of unique users: {results['unique_users']}")
    print(f"Average actions per user: {results['average_actions_per_user']}")
    print(f"Median actions per user: {results['median_actions_per_user']}")
    
    print("\nAll users ranked by activity:")
    print("-" * 50)
    for user, count in results['all_users_ranked']:
        print(f"{user}: {count} actions")

get_most_active_user(data: Dict) -> Dict: Returns a dictionary with the most active user's name and action count.

get_user_activity_percentage(data: Dict) -> float: Returns the percentage of total activity for the most active user.

get_total_actions(data: Dict) -> int: Returns the total number of actions in the data.

get_unique_users_count(data: Dict) -> int: Returns the number of unique users in the data.

get_all_users_ranked(data: Dict) -> List[Tuple[str, int]]: Returns a list of tuples, where each tuple contains the username and their activity count.

analyze_user_data(file_path: str) -> Dict: Returns a dictionary containing the analysis results.

get_average_actions_per_user(data: Dict) -> float: This function calculates the average number of actions per user by dividing the total number of actions by the number of unique users.

get_median_actions_per_user(data: Dict) -> int: This function calculates the median number of actions per user. It first gets a sorted list of the action counts for each user. Then, it determines the median by checking if the length of the list is even or odd, and selecting the appropriate middle value(s).

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.